2014-03-07 81 views
0

我試圖複製現有列表,然後將它們連接在一起。我使用了複製函數,它返回一個指向新列表的指針。我很難將第一個列表的最後一個指針指向另一個列表中的第一個節點。將列表添加到已存在的列表中C

Node *concatenates(Node *list1, Node *list2) { 
    Node *n5; 
    Node *n2; 
    n5=copy(list1); 
    n2=copy(list2); 
    while(n5!=NULL) 
     n5=n5->next; 
    n5->next=n2; /* having trouble with this part */ 
    return n5; 
} 
+0

爲'copy()'和'Node'結構添加代碼,並指定「有問題」的含義 –

+0

它不連接列表並給出分段錯誤。 – user3386053

+0

不發表評論,編輯所有這些東西到你的文章 –

回答

0

這裏的幾個問題。我會解決您的段錯誤:

while(n5!=NULL) 
    n5=n5->next; 
n5->next=n2 

while循環後,n5是保證NULL,所以n5->next是不確定的,並會產生賽格故障。這個while循環將阻止賽格故障(但仍然無法工作):

while(n5->next!=NULL) 
    n5=n5->next; 
n5->next=n2 

你的其他突出的問題是,你正在服用的list1的頭,把它在n5,然後扔出去與整個列表一個while循環直到n5是列表的尾部。你需要解決這個問題,否則你將不會回報你所期望的。

+0

我不明白你的意思是拋出整個列表。你的意思是n5被設置爲列表中的最後一個節點?我是否應該聲明另一個節點並將其設置爲指向n5並通過那裏循環到達末尾以便m5保持不變?我的意圖是循環到列表1的末尾,然後將最後一個元素設置爲指向另一個列表的開頭。 – user3386053

+0

我的意思是你首先把'n5'作爲你的列表的頭部,然後在while循環中拋出元素,直到'n5'變成尾部。沒有任何東西指向列表頭,所以這些節點永遠丟失。 –

+0

哇。謝謝。知道它現在的工作,它給我分割錯誤。至少它現在添加到列表中。我宣佈了一個新節點並將其設置爲n5;然後完成循環並將最後一個元素設置到新列表中。並將指針返回給n5的頭部。 – user3386053