这是链表的第6题,力扣链接。
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:
输入:head = [1,2,3,4] 输出:[2,1,4,3]示例 2:
输入:head = [] 输出:[]示例 3:
输入:head = [1] 输出:[1]
老规矩,先上暴力模拟法来试试。实现思路其实就是一个快慢指针:
func swapPairs(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
pre, cur := head, head.Next
for pre != nil && cur != nil {
temp := cur.Val
cur.Val = pre.Val
pre.Val = temp
pre = cur.Next
if pre != nil {
cur = cur.Next.Next
}
}
return head
}
也可以尝试递归来解决这个问题:
func swapPairs(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
next := head.Next
head.Next = swapPairs(next.Next)
next.Next = head
return next
}