题目:
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
解题:
迭代,交换,每次跳两步
代码:
func swapPairs(head *ListNode) *ListNode {
list := &ListNode{0, nil}
node := list
node.Next = head
var p1, p2, p3 *ListNode
for node.Next != nil && node.Next.Next != nil {
p1 = node.Next
p2 = node.Next.Next
p3 = p2.Next
p2.Next = p1
p1.Next = p3
node.Next = p2
node.Next.Next = p1
node = node.Next.Next
}
return list.Next
}
官方解答:
// 递归
func swapPairs(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
newHead := head.Next
head.Next = swapPairs(newHead.Next)
newHead.Next = head
return newHead
}
// 迭代
func swapPairs(head *ListNode) *ListNode {
dummyHead := &ListNode{0, head}
temp := dummyHead
for temp.Next != nil && temp.Next.Next != nil {
node1 := temp.Next
node2 := temp.Next.Next
temp.Next = node2
node1.Next = node2.Next
node2.Next = node1
temp = node1
}
return dummyHead.Next
}