C语言关于双链表的一个问题:下面是代码:
发布网友
发布时间:2024-03-19 07:39
我来回答
共3个回答
热心网友
时间:2024-06-21 16:15
根据你的程序,我做了一个小程序进行测试,算法没什么错误。不过要考虑
p1=first,如果first=NULL,那么p2=p1->next将是错误的,应该先判断下first
if(first==NULL) 直接将New插入
else {
开始查找插入点
}
下面是小程序
#include <stdio.h>
#include <stdlib.h>
typedef struct length
{
int age;
struct length *previous;
struct length *next;
}LENGTH;
LENGTH *ListAdd(LENGTH *New,LENGTH *first)
{
LENGTH *p1=NULL,*p2=NULL;
/*New=(LENGTH *)malloc(sizeof(LENGTH));*/
for(p1=first,p2=p1->next;p2!=NULL;p1=p1->next,p2=p2->next)
{
if(p2->age > New->age)
{
/*p2=p1->next;*/
p1->next=New;
New->previous=p1;
New->next=p2;
p2->previous=New;//应该是这里插入链表出了问题
break;
}
}
return first;
}
void main()
{
LENGTH *head,*p,*q,*New;
head=(LENGTH *)malloc(sizeof(LENGTH));
head->age=10;
p=(LENGTH *)malloc(sizeof(LENGTH));
p->age=20;
head->next=p;
p->previous=head;
q=(LENGTH *)malloc(sizeof(LENGTH));
q->age=40;
p->next=q;
q->previous=p;
q->next=NULL;
New=(LENGTH *)malloc(sizeof(LENGTH));
New->age=30;
head=ListAdd(New,head);
p=head;
while(p!=NULL)
{ printf("%d->",p->age);
p=p->next;
}
p=head;
while(p!=NULL)
{head=head->next;free(p);p=head;}
}
热心网友
时间:2024-06-21 16:18
首先解释一下,你这个不是程序,只是用C语言描述的数据结构,没有main函数,不能运行!
其二,你这个添加双链表节点的算法也没
热心网友
时间:2024-06-21 16:18
由代码可推断出你的推断完全正确:
if(p2->age > New->age)
{
/*p2=p1->next;*/
p1->next=New;
New->previous=p1;
New->next=p2;
p2->previous=New;/* 换成 p1=New 试试*/
break;
}