本文最后更新于:2022年8月29日 晚上
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:

| 输入:head = [1,2,3,4] 输出:[2,1,4,3]
|
示例 2:
示例 3:
提示:
- 链表中节点的数目在范围
[0, 100]
内
0 <= Node.val <= 100
进阶:你能在不修改链表节点值的情况下解决这个问题吗?(也就是说,仅修改节点本身。)
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
class Solution { public: ListNode* swapPairs(ListNode* head) { if(!head || !head->next) return head; ListNode* dummyHead = new ListNode(-1, head); ListNode* p = dummyHead; while(p->next && p->next->next){ ListNode* node1 = p->next; ListNode* node2 = node1->next; ListNode* next = node2->next; node1->next = next; node2->next = node1; p->next = node2; p = node1; } ListNode* ret = dummyHead->next; delete dummyHead; return ret; } };
|
java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
class Solution { public ListNode swapPairs(ListNode head) { if (head == null || head.next == null) { return head; } ListNode dummyHead = new ListNode(-1, head); ListNode p = dummyHead; while (p.next != null && p.next.next != null) { ListNode node1 = p.next; ListNode node2 = p.next.next; ListNode tmp = node2.next; p.next = node2; node2.next = node1; node1.next = tmp; p = node1; } return dummyHead.next; } }
|
| class Solution { public ListNode swapPairs(ListNode head) { if (head == null || head.next == null) { return head; } ListNode node = head.next; ListNode rNode = swapPairs(node.next);
node.next = head; head.next = rNode; return rNode; } }
|