当前位置:   article > 正文

LeetCode 第24题两两交换链表中的节点swapPairs

LeetCode 第24题两两交换链表中的节点swapPairs

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例 1:

  1. 输入:head = [1,2,3,4]
  2. 输出:[2,1,4,3]

示例 2:

  1. 输入:head = []
  2. 输出:[]

示例 3:

  1. 输入:head = [1]
  2. 输出:[1]

提示:

  1. 链表中节点的数目在范围 [0, 100] 内
  2. 0 <= Node.val <= 100

解题思路:

将整个链表分割为两个一组的小片段

参数说明:

curHead 当前结果链表的头节点

prevTail 前一段链表的结尾

n1 本段的第一个节点

n2 本段的第二个节点

n3 下一段的第一个节点

开始时候

 

 指针全部往后移动两格

 

 

 

Java代码

  1. /**
  2. * Definition for singly-linked list.
  3. * public class ListNode {
  4. * int val;
  5. * ListNode next;
  6. * ListNode() {}
  7. * ListNode(int val) { this.val = val; }
  8. * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  9. * }
  10. */
  11. class Solution {
  12. public ListNode swapPairs(ListNode head) {
  13. if(head==null){
  14. return head;
  15. }
  16. ListNode curHead = head;
  17. ListNode prevTail=null;
  18. ListNode n1 = head;
  19. ListNode n2 = head.next;
  20. ListNode n3;
  21. while(n2!=null){
  22. n3 = n2.next;
  23. n2.next = n1;
  24. n1.next = n3;
  25. if(curHead==head){
  26. curHead = n2;
  27. }
  28. if(prevTail!=null){
  29. prevTail.next = n2;
  30. }
  31. prevTail = n1;
  32. n1 = n3;
  33. if(n3==null){
  34. break;
  35. }
  36. n2 = n3.next;
  37. }
  38. return curHead;
  39. }
  40. }

Python代码

  1. # Definition for singly-linked list.
  2. # class ListNode(object):
  3. # def __init__(self, val=0, next=None):
  4. # self.val = val
  5. # self.next = next
  6. class Solution(object):
  7. def swapPairs(self, head):
  8. """
  9. :type head: ListNode
  10. :rtype: ListNode
  11. """
  12. if head is None:
  13. return head
  14. curHead = head
  15. prevTail = None
  16. n1 = head
  17. n2 = head.next
  18. while n2 is not None:
  19. n3 = n2.next
  20. n2.next = n1
  21. n1.next = n3
  22. if curHead == head:
  23. curHead = n2
  24. if prevTail is not None:
  25. prevTail.next = n2
  26. prevTail = n1
  27. n1 = n3
  28. if n3 is None:
  29. break
  30. n2 = n3.next
  31. return curHead

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码秘术家/article/detail/61246
推荐阅读
相关标签
  

闽ICP备14008679号