24. 两两交换链表中的节点(中等)

题目

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

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

示例:

1
给定 1->2->3->4, 你应该返回 2->1->4->3.

思路

每2个节点互换后,要和前1个节点绑定

关键点

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

复杂度

  • 时间复杂度:
  • 空间复杂度:

代码

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.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func swapPairs(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
node := head
head = head.Next
var pre *ListNode
for node != nil && node.Next != nil {
next := node.Next

if pre == nil {
pre = node
} else {
pre.Next = next
pre = node
}

node.Next = node.Next.Next
next.Next = node
node = node.Next
}
return head
}