题目
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题。
交换链表节点
示例
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例1
输入:head = []
输出:[]
示例2
输入:head = [1]
输出:[1]
分析
很显然,简单的思路是每一轮循环取出当前节点和下一个节点,交换位置并赋值给目标链表,然后从原链表中剔除这两个节点。直到链表遍历完成。
func swapPairs(head *ListNode) *ListNode {
if head == nil {
return nil
}
target := &ListNode{0, nil}
tail := target // 定义尾节点
for head != nil && head.Next != nil {
n0 := head
n1 := head.Next
n0.Next = nil
n2 := n1.Next
n1.Next = n0
head = n2
//将新链表赋值给尾节点
tail.Next = n1
// 更新尾节点
tail = tail.Next.Next
}
if head != nil {
tail.Next = head
}
return target.Next
}
提交测试,通过。
* 55/55 cases passed (1 ms)
* Your runtime beats 16.89 % of golang submissions
* Your memory usage beats 99.09 % of golang submissions (2.1 MB)