leetcode刷題-劍指offer-35題
阿新 • • 發佈:2022-01-08
leetcode刷題-劍指offer-35題
題目
請實現 copyRandomList
函式,複製一個複雜連結串列。在複雜連結串列中,每個節點除了有一個 next
指標指向下一個節點,還有一個 random
指標指向連結串列中的任意節點或者 null
。
示例 1:
輸入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
輸出:[[7,null],[13,0],[11,4],[10,2],[1,0]]
示例 2:
輸入:head = [[1,1],[2,1]]
輸出:[[1,1],[2,1]]
示例 3:
輸入:head = [[3,null],[3,0],[3,null]] 輸出:[[3,null],[3,0],[3,null]]
示例 4:
輸入:head = []
輸出:[]
解釋:給定的連結串列為空(空指標),因此返回 null。
解答
新手上路,才學疏淺,望斧正
- 先複製節點,再複製節點中的random
- 先把每個節點(假設為A)複製一份,放在它的後面(假設為 A1 )。
- 再 複製random 即A1的random 為 A的random(假設為B)的後一個節點(假設為B1)
- 將新節點(A1 , B1 ,,,)拆出來即可
class Solution3 { public Node copyRandomList(Node head) { if(head == null){ return null; } //在每個節點後複製一份它自己 Node p = head; while (p != null){ Node tem = new Node(p.val); tem.next = p.next; p.next = tem; p = tem.next; } //複製ramdom 節點 p = head; while (p != null){ if(p.random == null) { p.next.random = null; }else { p.next.random = p.random.next; } p = p.next.next; } p = head; Node res = null; Node q=null; while (p != null){ if(res == null){ res = p.next; p.next = p.next.next; q = res; }else { q.next = p.next; p.next = p.next.next; q = q.next; } p = p.next; } return res; } }