题目

中文

https://leetcode-cn.com/problems/swap-nodes-in-pairs/
image.pngimage.png

英文

https://leetcode.com/problems/swap-nodes-in-pairs/
Given a linked list, swap every two adjacent nodes and return its head.
You may not modify the values in the list’s nodes. Only nodes itself may be changed.
Constraints:

  • The number of nodes in the list is in the range [0, 100].
  • 0 <= Node.val <= 100

adjacent 邻近的
modify 修改

题解

第一次

思路

循环至最后节点为空 两两不停交换。
使用哨兵节点,是头尾不需要特殊化。

代码

  1. struct ListNode *swapPairs(struct ListNode *head)
  2. {
  3. struct ListNode dummyhead;
  4. dummyhead.next = head;
  5. struct ListNode *temp = &dummyhead;
  6. while (temp->next != NULL && temp->next->next != NULL)
  7. {
  8. struct ListNode *node1 = temp->next;
  9. struct ListNode *node2 = temp->next->next;
  10. struct ListNode *temp1;
  11. temp->next=node2;
  12. node1->next = node2->next;
  13. node2->next = node1;
  14. temp = node1;
  15. }
  16. return dummyhead.next;
  17. }

错误点

指针用 ->
直接用.
移动的是指针。
注意其中交换顺序。
image.png
这种交换会丢失。

学习

一般方法都是迭代和递归。看到有人使用了哈希表。
迭代还是容易理解,递归不太容易 ,第二次会使用递归来写。
贴一个递归学习的网页。套路解决递归

英文最高票也是 递归。