当前位置:   article > 正文

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 24题_给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改

递归

  1. class Solution {
  2. public:
  3. ListNode* swapPairs(ListNode* head) { //使用了递归,每次做了两个结点的交换并且连接下一个头结点。
  4. if(head == nullptr || head->next == nullptr)
  5. return head;
  6. ListNode* next = head->next;
  7. head->next = swapPairs(next->next);
  8. next->next = head;
  9. return next;每一次返回交换那个头结点。
  10. }
  11. };

非递归

  1. class Solution {
  2. public:
  3. ListNode* swapPairs(ListNode* head) {
  4. ListNode* hhead = new ListNode(0);//用来记住第一个结点,不然后面不知道返回什么。//而且如果不多加一个头结点,前两个交换后找不到第三个连接的结点。因为这里的原序中的第4个结点是找不到的
  5. hhead->next = head;//后面会发生交换,所以hhead->next肯定要更新。
  6. ListNode* temp = hhead;//并不想hhead改变。
  7. while (temp->next&&temp->next->next)
  8. {
  9. ListNode* node1 = temp->next;//为了好看一点,可读性,表示原序的第一个结点。
  10. ListNode* node2 = temp->next->next;//temp->next->next->next写出来也是可以的,但再加一个next就不行了,因为第三个next那里可以为空指针。
  11. temp->next = node2;
  12. node1->next = node2->next;//记住了node2-》next,后面才可以改变。
  13. node2->next = node1;
  14. temp = node1;
  15. }
  16. return hhead->next;
  17. }
  18. };

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

闽ICP备14008679号