时间复杂度:O(n)
解题思路
保存三个变量,分别是链表已经交换过部分的尾结点(headPre)、需要交换的两个结点中的头结点(head)和下一次交换的两个节点中的头结点(nextHead),记录下这三个变量后便可以实现交换操作。第一步更新headPre的next指向head.Next,第二步更新head的next指向nextHead,第三步更新headPre的Next结点的Next指向head,这样便可实现交换操作。最后更新headPre为head。
AC代码
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func swapPairs(head *ListNode) *ListNode {
res:=&ListNode{Next:head}
slow,fast:=res,head
for fast!=nil&&fast.Next!=nil{
fast=fast.Next.Next
head:=slow.Next
slow.Next=head.Next
head.Next=fast
slow.Next.Next=head
slow=head
}
return res.Next
}
感悟
很简单的一道链表题,理清交换时各节点的顺序即可。