题目介绍
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例1
输入: head = [1,2,3,4]
输出: [2,1,4,3]
示例2
输入: head = []
输出: []
示例 3:
输入: head = [1]
输出: [1]
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/sw… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
设置虚拟节点dummyHead, 让dummyHead的next指向head,让temp等于dummyHead,然后循环temp节点, 做以下操作
- 记录pre 节点等temp的next节点
- 记录当前节点cur 等 temp的next的next节点
- 设置当前pre节点的next 等 cur的next节点
- 设置cur的next 等 pre
- 设置temp的next 等 cur
- 设置temp 等 pre
var swapPairs = function (head) {
if (!head) return null
let dummyHead = new ListNode(-1, head)
let temp = dummyHead
// -1 => 1 => 2 => 3 => 4 => 5 => null
while (temp.next && temp.next.next) {
let pre = temp.next // 1 ----- 3
let cur = temp.next.next // 2 ----- 4
pre.next = cur.next // 1 => 3 ----- 3 => 5
cur.next = pre // 2 => 1 ----- 4 => 3
temp.next = cur // -1 => 2 ----- 1 => 4
temp = pre // 1 ----- 3
}
return dummyHead.next
}