題目:有一個鏈表L,其每個節點有2個指針,一個指針next指向鏈表的下個節點,另一個random隨機指向鏈表中的任一個節點,可能是自己或者為空,寫一個程序,要求復制這個鏈表的結構并分析其復雜性
解決方法一:
O(n)的復雜度,掃面兩邊即可。

圖【1】
圖【1】是需要復制的鏈表

圖【2】
如圖【2】所示,ABCD是原來的鏈表,A’B’C’D’是復制的鏈表,第一遍掃描順序復制next指針,把ABCD的next分別指向A’B’C’D’,將A’的next指針指向B,B’的next指針指向C,依次類推
復制random指針: A’->random=A->random->next
恢復:A->next=A’->next;A’->next=A’->next->next;
解決方法二:
也是O(n)的時間復雜度。。。

圖【3】
如圖【3】,第一次遍歷將要復制的鏈表A’ B’ C’ D’插入員鏈表中,然后再一次遍歷復制random指針:A->next->random=A->random->next;
恢復很簡單:A->next=A->next->next;A’-next=A’->next->next;
轉載請注明出處。
posted on 2011-04-02 23:01
ccyy 閱讀(4746)
評論(2) 編輯 收藏 引用 所屬分類:
C/C++