复制链表

题目: 138. 随机链表的复制

有个不用哈希表的题解, 小巧思, 直接在原链表插入新节点, 可以形成点到点的映射. 感觉比较难想到.

func copyRandomList(head *Node) (result *Node) {
    if head == nil {
        return nil
    }
    for p := head; p != nil; p = p.Next.Next {
        tmp := &Node{Val: p.Val, Next: p.Next}
        p.Next = tmp
    }
    for p := head; p != nil; p = p.Next.Next {
        if p.Random == nil {
            p.Next.Random = nil
        } else {
            p.Next.Random = p.Random.Next
        }
    }
    result = head.Next
    for p := head; p != nil; p = p.Next {
        t := p.Next
        p.Next = t.Next
        if t.Next != nil {
            t.Next = t.Next.Next
        }
    }
    return
}
posted @ 2025-02-09 18:57  aparaburu  阅读(16)  评论(0)    收藏  举报