curTain

  1. 两两交换链表中的节点

24. 两两交换链表中的节点

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

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

示例 1:

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

示例 2:

输入:head = []
输出:[]

示例 3:

输入:head = [1]
输出:[1]

解题思路

  1. 创建两个节点,一个返回时使用,另一个用于第一次操作
  2. 遍历时,取出前一个节点和操作的下一个节点,
  3. 交换两个节点的 next
  4. 连接前一个节点和操作的下一个节点
  5. 下移当前节点和前一个节点

实现

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
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var swapPairs = function(head) {
let res = new ListNode()
res.next = head
let pre = res
let chain = res.next
while( chain && chain.next ){
// 获取操作节点和后续节点
let next = chain.next
let nextNext = next && next.next
// 修改 next
pre.next = next
chain.next = nextNext
next.next = chain
// 赋值-下移
pre = chain
chain = nextNext
}
return res.next
};

 评论