Lintcode 105 Copy List with Random Pointer solution問題解
1743 ワード
【タイトル説明】
A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.
Return a deep copy of the list.
各ノードに追加されたランダムポインタを含むチェーンテーブルが与えられ、チェーンテーブル内の任意のノードまたは空のノードを指すことができる.
深いコピーされたチェーンテーブルを返します.
【タイトルリンク】
www.lintcode.com/en/problem/copy-list-with-random-pointer/
A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.
Return a deep copy of the list.
各ノードに追加されたランダムポインタを含むチェーンテーブルが与えられ、チェーンテーブル内の任意のノードまたは空のノードを指すことができる.
深いコピーされたチェーンテーブルを返します.
【タイトルリンク】
www.lintcode.com/en/problem/copy-list-with-random-pointer/
let data = {
val:1,
next:{
val:2,
next:{
val:3,
next:{
val:4,
next:null
}
}
}
};
data.rand = data.next.next;
data.next.rand = null;
data.next.next.rand = null;
data.next.next.next.rand = data;
const copyRandomList = function(head){
if(head === null){
return null;
}
let cur = head;
let next = null;
while(cur !== null){
next = cur.next;
cur.next = {};
cur.next.next = next;
cur = next;
}
cur = head;
let curCopy = null;
while(cur !== null){
next = cur.next.next;
curCopy = cur.next;
curCopy.val = cur.val;
curCopy.rand = (function(){
if(cur.rand !== null){
// cur.rand ,cur.rand.next ,
return cur.rand.next;
}
return null;
})();
cur = next;
}
let res = head.next;
cur = head;
while(cur !== null){
next = cur.next.next;
curCopy = cur.next;
cur.next = next;
curCopy.next = (function(){
if(next !== null){
return next.next;
}
return null;
})();
cur =next;
}
return res;
};
let result = copyRandomList(data);
console.log(result);