题目描述
题目链接
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
1 2 3 4
| 示例 1:
输入:head = [1,2,3,4] 输出:[2,1,4,3]
|
1 2 3 4
| 示例 2:
输入:head = [] 输出:[]
|
1 2 3 4
| 示例 3:
输入:head = [1] 输出:[1]
|
算法1
遍历一次 时间:O(n) 空间:O(1)
思路: 借助 dummy 节点,完成以两个节点为一组的节点交换
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
|
class Solution { public: ListNode* swapPairs(ListNode* head) { if(!head) return head; auto dummy = new ListNode(-1); dummy->next = head; if( !head || !head->next) return head; auto p = dummy; while( p && p->next && p->next->next) { auto a = p->next; auto b = a->next; a->next = b->next; b->next = a; p->next = b; p = a; }
return dummy->next; } };
|