請實現 copyrandomlist 函式,複製乙個複雜鍊錶。在複雜鍊錶中,每個節點除了有乙個 next 指標指向下乙個節點,還有乙個 random 指標指向鍊錶中的任意節點或者 null。
雜湊node和index,比較愚蠢。。。
主要思路是兩次遍歷鍊錶,用乙個map儲存每乙個結點指標對應的index。第二次遍歷時向前或向後增加到對應的index,然後更新random指標。
node*
copyrandomlist
(node* head)
else
curr = curr-
>next;
} tmp = res;
curr = head;
j =0;
while
(curr)
else
while
(r >= m)
m++; t*** = t***-
>next;}}
j++; tmp = tmp-
>next;
curr = curr-
>next;
}return res;
}
雜湊,原始鍊錶的node和新建鍊錶的node雜湊。
兩次遍歷,第一次新建鍊錶,並加入map;第二次更新next和random指標。
node*
copyrandomlist
(node* head)
curr = head;
while
(curr)
return m[head]
;}
參考大佬,實在想不到。
拼接再拆分(旋轉、跳躍、我不停歇…)。
node*
copyrandomlist
(node* head)
// 第二次遍歷,更新random指標
curr = head;
node* new_node = curr-
>next;
while
(curr)
// 第三次遍歷,重新拼接返回新鍊錶
curr = head;
new_node = curr-
>next;
node* res = new_node;
while
(curr)
new_node-
>next = curr-
>next-
>next;
curr = curr-
>next;
new_node = new_node-
>next;
}return res;
}
劍指Offer 刷題 複雜鍊錶的複製
public class randomlistnode public class solution randomlistnode currentnode phead 1 遍歷鍊錶,複製每個結點,如複製結點a得到a1,將結點a1插到結點a後面 while currentnode null curren...
劍指Offer刷題 鍊錶
劍指 offer 18.刪除鍊錶的節點 難度簡單 給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。注意 此題對比原題有改動 示例 1 輸入 head 4,5,1,9 val 5 輸出 4,1,9 解釋 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的...
劍指offer刷題日記 鍊錶
鍊錶03 從尾到頭列印鍊錶 python 採用insert方法 class solution def printlist self,listnode if not listnode return result while listnode result.insert 0 listnode.val l...