当前位置:   article > 正文

链表 LeetCode 24 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 ...

php 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

示例:

给定 1->2->3->4, 你应该返回 2->1->4->3.

说明:

  • 你的算法只能使用常数的额外空间。
  • 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

思路:

递归

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * ListNode *next;
  6. * ListNode(int x) : val(x), next(NULL) {}
  7. * };
  8. */
  9. class Solution {
  10. public:
  11. ListNode* swapPairs(ListNode* head) {
  12. if(head == NULL || head->next == NULL) return head;
  13. ListNode* temp = head -> next;
  14. head -> next = swapPairs(temp -> next);
  15. temp -> next = head;
  16. return temp;
  17. }
  18. };

循环

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * ListNode *next;
  6. * ListNode(int x) : val(x), next(NULL) {}
  7. * };
  8. */
  9. class Solution {
  10. public:
  11. ListNode* swapPairs(ListNode* head) {
  12. ListNode *dummyHead = new ListNode(0);
  13. dummyHead->next = head;
  14. ListNode *p = dummyHead;
  15. while (p->next && p->next->next) {
  16. ListNode *node1 = p->next;
  17. ListNode *node2 = node1->next;
  18. ListNode *next = node2->next;
  19. node2->next = node1;
  20. node1->next = next;
  21. p->next = node2;
  22. p = node1;
  23. }
  24. ListNode *ret = dummyHead->next;
  25. delete dummyHead;
  26. return ret;
  27. }
  28. };

 

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

闽ICP备14008679号