1. 24. 两两交换链表中的节点
https://leetcode-cn.com/problems/swap-nodes-in-pairs/
https://leetcode-cn.com/problems/swap-nodes-in-pairs/
/**
* 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
}
first := head // 需要交换的第一个节点
second := head.Next // 需要交换的第二个节点
third := head.Next.Next // 下一组需要交换的第一个节点
second.Next = first // 把第二个节点的后继指针Next指向第一个节点
first.Next = swapPairs(third) // 把第一个节点的后继指针Next指向下一组完成交换之后的第一个节点
return second
}
//定义一个轴点,每次移动轴点pre
func swapPairs(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
pre := new(ListNode)
pre.Next = head
tmp := pre.Next.Next
for pre.Next != nil && pre.Next.Next != nil {
a := pre.Next
b := a.Next
pre.Next, b.Next, a.Next = b, a, b.Next
pre = a
}
return tmp
}
func swapPairs(head *ListNode) *ListNode {
if head == nil || head.Next ==nil {
return head
}
var pre = new(ListNode)
pre.Next = head
firstNode := pre.Next.Next
for pre.Next !=nil && pre.Next.Next != nil{
pre.Next, pre.Next.Next, pre.Next.Next.Next, pre = pre.Next.Next, pre.Next.Next.Next, pre.Next, pre.Next
}
return firstNode
}