【Leetcode】24. 两两交换链表中的节点
代码
go
/**
* 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
}
// 创建虚拟头结点
dummy := &ListNode{
Next : head,
}
// 三个指针
pre, cur, ne := dummy, head, head.Next
for cur != nil {
// 如果ne为空,则直接return
if ne == nil {
break
}
// 临时保留ne的下一个节点
t := ne.Next
// pre指向ne
pre.Next = ne
// ne指向cur
ne.Next = cur
// cur指向原本ne的下一个节点
cur.Next = t
// pre跳到cur
pre = cur
// cur跳到原本ne的下一个节点
cur = t
// 如果cur不为空,则让ne跳到cur的下一个节点
if cur != nil {
ne = cur.Next
}
}
// 返回虚拟头节点的下一个节点
return dummy.Next
}