mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-25 12:14:26 +08:00
47 lines
853 B
Go
47 lines
853 B
Go
package leetcode
|
||
|
||
//执行用时:0 ms, 在所有 Go 提交中击败了100.00%的用户
|
||
//内存消耗:3.4 MB, 在所有 Go 提交中击败了100.00%的用户
|
||
type Node struct {
|
||
Val int
|
||
Next *Node
|
||
Random *Node
|
||
}
|
||
|
||
func copyRandomList(head *Node) *Node {
|
||
if head == nil {
|
||
return nil
|
||
}
|
||
tempHead := copyNodeToLinkedList(head)
|
||
return splitLinkedList(tempHead)
|
||
}
|
||
|
||
func splitLinkedList(head *Node) *Node {
|
||
cur := head
|
||
head = head.Next
|
||
for cur != nil && cur.Next != nil {
|
||
cur.Next, cur = cur.Next.Next, cur.Next
|
||
}
|
||
return head
|
||
}
|
||
|
||
func copyNodeToLinkedList(head *Node) *Node {
|
||
cur := head
|
||
for cur != nil {
|
||
node := &Node{
|
||
Val: cur.Val,
|
||
Next: cur.Next,
|
||
}
|
||
cur.Next, cur = node, cur.Next
|
||
|
||
}
|
||
cur = head
|
||
for cur != nil {
|
||
if cur.Random != nil {
|
||
cur.Next.Random = cur.Random.Next
|
||
}
|
||
cur = cur.Next.Next
|
||
}
|
||
return head
|
||
}
|