LeetCode 24 两两交换链表中的节点

题目:

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

解题:

迭代,交换,每次跳两步

代码:


func swapPairs(head *ListNode) *ListNode {
    list := &ListNode{0, nil}
    node := list
    node.Next = head
    var p1, p2, p3 *ListNode
    for node.Next != nil && node.Next.Next != nil {
        p1 = node.Next
        p2 = node.Next.Next
        p3 = p2.Next
        p2.Next = p1
        p1.Next = p3
        node.Next = p2
        node.Next.Next = p1
        node = node.Next.Next
    }
    return list.Next
}

官方解答:


// 递归
func swapPairs(head *ListNode) *ListNode {
    if head == nil || head.Next == nil {
        return head
    }
    newHead := head.Next
    head.Next = swapPairs(newHead.Next)
    newHead.Next = head
    return newHead
}


// 迭代
func swapPairs(head *ListNode) *ListNode {
    dummyHead := &ListNode{0, head}
    temp := dummyHead
    for temp.Next != nil && temp.Next.Next != nil {
        node1 := temp.Next
        node2 := temp.Next.Next
        temp.Next = node2
        node1.Next = node2.Next
        node2.Next = node1
        temp = node1
    }
    return dummyHead.Next
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注