劍指Offer刷題 複雜鍊錶的複製(35)

2021-10-20 22:29:04 字數 1542 閱讀 5052

請實現 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...