This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center。
7年前关闭。
我试图将两个链接列表的内容复制到一个,以便一次(从每个链接列表)复制一个元素。
因此,如果我有:
如果一个列表短于另一个列表,则其余节点将附加在结果列表的末尾。
这是我的代码,它带有一个小错误:它在末尾创建了一个额外的节点(我不想要)。
如何修改它,使其不创建最后一个节点?
输入示例:
7年前关闭。
我试图将两个链接列表的内容复制到一个,以便一次(从每个链接列表)复制一个元素。
因此,如果我有:
list1 = [1,2,3]
和list2 = [4,5,6]
,则result = [1,4,2,5,3,6]
。如果一个列表短于另一个列表,则其余节点将附加在结果列表的末尾。
这是我的代码,它带有一个小错误:它在末尾创建了一个额外的节点(我不想要)。
node *list_copy(node *list1, node *list2)
{
node *mylist = newnode();
node *head = mylist;
while (list1 != NULL || list2 != NULL) {
if (list1 != NULL) {
mylist->data = list1->data;
mylist->next = newnode();
mylist = mylist->next;
list1 = list1->next;
}
if (list2 != NULL) {
mylist->data = list2->data;
mylist->next = newnode();
mylist = mylist->next;
list2 = list2->next;
}
}
return head;
}
如何修改它,使其不创建最后一个节点?
输入示例:
List1 = [1,2,3], List2 = [1,2,3,4,5,6], Result = [1,1,2,2,3,3,4,5,6,0];
最佳答案
不要在while块中进行合并,这会使您的代码更难阅读。从功能上将列表副本分解为另一个函数,然后调用它两次。
您在循环之前执行一个newnode,然后在添加当前项之后执行newnode。怎么样...
node *mylist;
node *head;
while (listItem != null) {
if(head == null) {
mylist = newnode();
head = myList;
}
else {
mylist->next = newnode();
mylist = mylist->next;
}
mylist->data = listItem->data;
listItem = listItem->next;
}
关于c - C合并两个链表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10923211/
10-12 05:54