2014-03-07 45 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