两两交换链表中的节点

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

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

1

图解如下:

1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
func swapPairs(head *ListNode) *ListNode {
// 定义一个head之前的节点,作为初始节点
start := &ListNode{}
// 初始节点指向头指针
start.Next = head
// 第一个指针指向这个初始节点
prev := start
// 开始循环,当前节点为nil,或Next为nil则结束循环
for head != nil && head.Next != nil {
// 图解开始操作指针的next
next := head.Next
head.Next = next.Next
next.Next = head
prev.Next = next
// 相当于移动指针,head的next已经改变
prev = head
head = head.Next
}
// 最后返回初始节点的next,也就是后续节点都已经改变完成的节点
return start.Next
}