gpt4 book ai didi

c - C语言合并双链表

转载 作者:太空宇宙 更新时间:2023-11-04 03:13:14 25 4
gpt4 key购买 nike

用C语言合并两个链表。

我试图合并两个已排序的双链表。当我使用不同的输入运行我的代码时,有时代码会因 EXC_BAD_ACCESS 错误而崩溃。我不明白为什么,代码对我来说似乎很完美,我用类似的方法合并两个单链表,它起作用了。 有人可以解释吗?谢谢!

   #include <stdio.h>  

#include <stdlib.h>

typedef struct Node
{

struct Node* prior;

struct Node* next;

int value;

}Node,*list;

list create_list()
{

list head = (list)malloc(sizeof(Node));

if(!head) exit(-1);

list tail;

tail=head;

printf("Please enter the length of double linked list:\n");

int len;

scanf("%d",&len);

for(int i=0;i<len;i++)

{

list new = (list)malloc(sizeof(Node));

printf("Please enter the value of node:\n");

int val;

scanf("%d",&val);

new->value=val;

tail->next = new;

new->prior=tail;

tail=new;
}
return head;
}

list merge_list(list a, list b)
{

if(a==NULL||b==NULL) exit(-1);

list p=(list)malloc(sizeof(Node));

list l=p;

while(a&&b)
{

if(a->value<=b->value)
{

p->next = a;

a->prior=p;

p=a;

a=a->next;

}
else
{

p->next = b;

b->prior=p;

p=b;

b=b->next;

}
}
if(a!=NULL)

{

p->next=a;

a->prior=p;
}

if(b!=NULL)
{

p->next=b;

b->prior=p;

}

return l;
}

int main() {

list l = create_list();

l=l->next;

list m = create_list();

m=m->next;

list n =merge_list(l,m);

n=n->next;

while(n)
{

printf("%d\n",n->value);

n=n->next;
}

return 0;
}

最佳答案

问题在于,在 create_list 中,您没有使用 NULL 初始化 new->next

从这个错误来看,在 merge_list 中将指针与 NULL 进行比较是没有意义的。

关于c - C语言合并双链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54310729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com