2015-04-01 44 views
0

問題 您將得到一個重複的鏈接列表(給出:頭,最後的元素 - >未來= NULL)鏈接與NEXT指針和隨機指針LL節點的屬性列表。創建具有給定的鏈接列表

struct node { 
    node *NEXT; 
    node *RANDOM; 
} 

現在你要複製這個LL(僅C代碼)

+6

這是一個功課題嗎? 爲什麼不給我們展示一些你已經試過的代碼,並告訴我們你面臨的問題。 – kkaosninja 2015-04-01 03:51:51

+1

不是家庭作業,但我只是讀了幾個在線帖子,並試圖得到有效的答案。 我試圖在兩個原始節點之間插入新節點原始LL:頭→n1→n2→ 新頭→頭→新1→n1→新2→n2 .... 然後只需捕捉應對RANDOM鏈接的新節點。 我想知道是否有人有更好的想法來輕鬆完成。 – JustVirtually 2015-04-01 03:58:06

回答

1

我給一個直接的解決方案通過節點複製鏈接列表節點。

假設你有這樣的鏈表,HEAD - > Node1 - > Node2 - > ... NodeN - > NULL

struct node * head_dup = NULL; //Create the head of the duplicate linked list. 
struct node * tmp1 = head, * tmp2 = head_dup; //tmp1 for traversing the original linked list and tmp2 for building the duplicate linked list. 
while(tmp1 != NULL) 
{ 
    tmp2 = malloc(sizeof(struct node)); //Allocate memory for a new node in the duplicate linked list. 
    tmp2->RANDOM = malloc(sizeof(struct node)); //Not sure what you are storing here so allocate memory to it and copy the content of it from tmp1. 
    *(tmp2->RANDOM) = *(tmp1->RANDOM); 
    tmp2->NEXT = NULL; //Assign NULL at next node of the duplicate linked list. 
    tmp2 = tmp2->NEXT; //Move both the pointers to point the next node. 
    tmp1 = tmp1->NEXT; 
}