NOTE

两两交换链表中的节点

两两交换链表中的节点的 LeetCode 解题笔记。

Data Structures & Algorithms创建于 更新于 约 1 分钟读完historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 题目描述

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

2. 思路

同反转链表 II.md

3. 实现

3.1. 三指针

/**
 * 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 }
    dummyHead := &ListNode{}
    d := dummyHead
    current := head
    for current != nil {
        var next *ListNode
        d.Next,next = reverse(current, 2)
        d = d.Next.Next
        current = next
    }
    return dummyHead.Next
}

func reverse(head *ListNode, count int) (*ListNode, *ListNode) {
    if head == nil || head.Next == nil {return head, nil}
    var prev *ListNode
    current := head
    var next *ListNode
    for i:=0;i < count;i++ {
        next = current.Next
        current.Next = prev
        prev = current
        current = next
    }
    return prev, current
}

4. 参考

讨论

使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看