复制链表
题目: 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
}

浙公网安备 33010602011771号