【发布时间】:2014-03-10 18:48:03
【问题描述】:
我正在尝试编写一个函数,将两个列表连接起来形成一个新列表,其中包含 list1 和 list2 中所有节点的副本,并返回一个指向这个新列表的指针。
Node *concat(Node *list1, Node *list2) {
Node *head, *ptr;
if (list1==NULL) {
if (list2!=NULL)
return copy(list2);
/*copy refers to a function that copies a list & returns pointer to new list*/
else
return NULL;
}
else if (list2==NULL) {
if (list1!=NULL)
return copy(list1);
else
return NULL;
}
else {
while (list1 != NULL) {
if (head==NULL) {
head=newNode(list1->airport);
ptr=head;
}
else {
Node *n=newNode(list1->airport);
ptr->next=n;
ptr=ptr->next;
}
list1=list1->next; }
while (list2 != NULL) {
Node *n1=newNode(list2->airport);
ptr->next=n1;
ptr=ptr->next;
list2=list2->next;
}
}
return head;
}
当我使用打印的程序测试此功能时
- 连接到 NULL 列表 2 的单节点列表 1
- 一个 NULL list1 连接到一个单节点 list2
- 节点列表 (list1) 连接到单节点列表 2
我遇到了分段错误。
我在函数中找不到分段错误的来源,尽管我相信它在第一部分,在 while (list1 != NULL) 之前,因为如果两个列表都不是 NULL,它似乎可以工作。
【问题讨论】:
-
你永远不会将 head 初始化为 NULL;
-
既然你已经有了
copy(),那么在list1和list2的每一个上调用copy()不是更简单,然后将前者的末尾加入到开头后者? -
总是初始化
Node *head = NULL; Node *ptr = NULL; -
你的意思是当两个列表都不为空时代码工作正常?并在列表之一为空时给出分段错误?
-
如果您实现
copy()-函数的方式是在将空指针传递给它时返回空指针,则可以大大简化此函数。
标签: c linked-list segmentation-fault concatenation