当前位置:   article > 正文

LeetCode第二十四题(两两交换链表中的节点)_给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改

题目描述:

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

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

输入:head = []
输出:[]
示例 3:

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

  1. class Solution {
  2. public:
  3. ListNode* swapPairs(ListNode* head) {
  4. ListNode* dummy = new ListNode(0);
  5. dummy->next = head;
  6. //0 -> 1 -> 2
  7. //preNode curNode curNextNode
  8. ListNode* preNode = dummy,*curNode = dummy->next;
  9. while(curNode && curNode->next){
  10. ListNode* curNextNode = curNode->next;
  11. //交换节点
  12. curNode->next = curNextNode->next;
  13. curNextNode->next = curNode;
  14. preNode->next = curNextNode;
  15. //指针后移
  16. //preNode = preNode->next->next;
  17. preNode = curNode;
  18. curNode = curNode->next;
  19. }
  20. return dummy->next;
  21. }
  22. };

使用三个指针(preNode, curNode, curNextNode)分别指向虚拟头节点以及要交换的两个节点

 

交换节点时先连接后面再连接前面,防止后面的节点丢失。因此先让curNode节点连接curNextNode节点的下一个节点, 然后curNextNode节点连接curNode节点, 最后preNode节点连接curNextNode节点

 

 注意交换之后, curNodecurNextNode的位置发生了交换, 因此在向后移动三个节点时应注意

 

因为curNode节点位置与curNextNode节点位置发生了改变, 因此向后移动preNode节点时,可以让preNode = preNode->next->next, 也可以直接让preNode = curNodecurNode = curNode->next, 而不是(curNode = curNode->next->next), 因为curNode节点位置与curNextNode节点位置发生了改变。

 

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

闽ICP备14008679号