给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
________________________________________________________________________________________________
链表问题,设置一个头节点很重要,也很方便。
双指针,指向两个要交换的节点。
注意:first 节点 和 second 节点的交换后向后移动,最先移动p,先移动first,再判断first是否为空,接着再移动second
func swapPairs(head *ListNode) *ListNode {
resHead := &ListNode{0,nil}
if head == nil {
return head
}
p := resHead
p.Next = head
first := head
second := head.Next
for second != nil {
t := second.Next
second.Next = first
first.Next = t
p.Next = second
p = first
first = first.Next
if first == nil {
break
}
second = first.Next
}
return resHead.Next
}