当前位置:   article > 正文

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

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

力扣24题

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

 解答:这个题也是很绕,所以我详细解释一下,就用上边的题为例子,小白看,大神就不用看了。

  1. 执行第1行,第二行,设置虚拟头节点,设置cur指向虚拟头;
  2. 执行3,while循环,符合其中的两个条件进入循环;
  3. 执行4,5行,定义一个temp指针指向“1”,temp1指针指向“3”。
  4. 执行6,把cur->next->next赋给cur->next,其实就是把节点“1”里面的指针(指向“2”)赋给虚拟头里面的指针(指向“1”),也就是现在虚拟头里面的指针指向“2”了
  5. 执行7,把temp赋给cur->next->next,temp指针指向“1”,cur->next->next是“2”里面的指针(指向“3”),现在指向“1”
  6. 执行8,把temp1赋给cur->next->next->next,temp1指针指向“3” ,按照上面的程序执行下来,现在cur->next->next->next已经发生改变,已经代表“1”里面指针了(指向“2”),把它变为指向“3”。
  7. 以上步骤执行完:链表已经变成了:虚拟头->2->1->3->4->null;
  8. 执行9,把cur往后移两位,也就是cur指向“1”;
  9. 执行3,while循环,符合其中的两个条件进入循环;
  10. 执行4,5行,temp指针指向“3”,temp1指针指向“null”。
  11. 执行6,把cur->next->next赋给cur->next,其实就是把节点3”里面的指针(指向“4”)赋给“1”里面的指针(指向“3”),也就是现在“1”里面的指针指向“4”了
  12. 执行7,把temp赋给cur->next->next,temp指针指向“3”,cur->next->next是“4”里面的指针(指向“null”),现在指向“3”
  13. 执行8,把temp1赋给cur->next->next->next,temp1指针指向“null” ,按照上面的程序执行下来,现在cur->next->next->next已经发生改变,已经代表“3”里面指针了(指向“4”),把它变为指向“null”。
  14. 以上步骤执行完:链表已经变成了:虚拟头->2->1->4->3->null;
  15. 执行9,把cur往后移两位,也就是cur指向“3”;
  16. 执行3,while循环,不符合其中的两个条件不进入循环;
  17. 执行10,返回链表。
  1. class Solution {
  2. public:
  3. ListNode* swapPairs(ListNode* head) {
  4. //if (head == nullptr || head->next == nullptr ) return head;
  5. ListNode* dummyHead = new ListNode(0,head); // 1
  6. ListNode* cur = dummyHead; // 2
  7. while(cur->next != nullptr && cur->next->next != nullptr) // 3
  8. {
  9. ListNode* temp = cur->next; // 4
  10. ListNode* temp1 = cur->next->next->next; // 5
  11. cur->next = cur->next->next; // 6
  12. cur->next->next = temp; // 7
  13. cur->next->next->next = temp1; // 8
  14. cur = cur->next->next; // 9
  15. }
  16. return dummyHead->next; // 10
  17. }
  18. };

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

闽ICP备14008679号