leetcode 链接:两两交换链表中的节点

题目

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


你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例:
[中等] 24. 两两交换链表中的节点 - 图1

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

解答 & 代码

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * ListNode *next;
  6. * ListNode() : val(0), next(nullptr) {}
  7. * ListNode(int x) : val(x), next(nullptr) {}
  8. * ListNode(int x, ListNode *next) : val(x), next(next) {}
  9. * };
  10. */
  11. class Solution {
  12. public:
  13. ListNode* swapPairs(ListNode* head) {
  14. if(head == nullptr || head->next == nullptr)
  15. return head;
  16. ListNode* dummyHead = new ListNode(-1, head);
  17. ListNode* pre = dummyHead;
  18. ListNode* cur = head;
  19. while(cur != nullptr && cur->next != nullptr)
  20. {
  21. // 交换 cur 和其下一个节点
  22. ListNode* next = cur->next;
  23. cur->next = next->next;
  24. pre->next = next;
  25. next->next = cur;
  26. // 更新 pre 和 cur,以访问下一组节点进行交换
  27. pre = cur;
  28. cur = cur->next;
  29. }
  30. return dummyHead->next;
  31. }
  32. };

执行结果:

  1. 执行结果:通过
  2. 执行用时:8 ms, 在所有 C++ 提交中击败了 53.84% 的用户
  3. 内存消耗:7.4 MB, 在所有 C++ 提交中击败了 11.56% 的用户