Data structures 双链接列表

Data structures 双链接列表,data-structures,Data Structures,我正在使用双链表删除一个(第3个或第4个)节点…每次只删除第一个元素?以下代码有什么问题 #include<stdio.h> #include<malloc.h> struct node { int data; struct node *pre; struct node *link; }; //void addafter(struct node*,int,int); main() { struct node *p=NULL; add(&p,2); add(&

我正在使用双链表删除一个(第3个或第4个)节点…每次只删除第一个元素?以下代码有什么问题

#include<stdio.h>
#include<malloc.h>
struct node
{
int data;
struct node *pre;
struct node *link;
};
//void addafter(struct node*,int,int);
main()
{
struct node *p=NULL;
add(&p,2);
add(&p,3);
add(&p,4);
add(&p,5);
add(&p,6);
add(&p,27);
add(&p,8);
add(&p,9);
add(&p,10);

//addafter(&p,7,20);

delete(&p ,6);

display(&p);
}
add(struct node **q,int n)
{
struct node *temp,*r;
temp=*q;
if(temp==NULL)
{
temp=(struct node*)malloc(sizeof(struct node));
temp->pre=NULL;
temp->data=n;
temp->link=NULL;
#include<stdio.h>
#include<malloc.h>
struct node
{
int data;
struct node *pre;
struct node *link;
};
//void addafter(struct node*,int,int);
main()
{
struct node *p=NULL;
add(&p,2);
add(&p,3);
add(&p,4);
add(&p,5);
add(&p,6);
add(&p,27);
add(&p,8);
add(&p,9);
add(&p,10);

//addafter(&p,7,20);

delete(&p ,6);

display(&p);
}
add(struct node **q,int n)
{
struct node *temp,*r;
temp=*q;
if(temp==NULL)
{
temp=(struct node*)malloc(sizeof(struct node));
temp->pre=NULL;
temp->data=n;
temp->link=NULL;
*q=temp;
}
else
{
while(temp->link!=NULL)
temp=temp->link;
r=(struct node*)malloc(sizeof(struct node));
r->pre=temp;
r->data=n;
r->link=NULL;
temp->link=r;
}
}
/*
addafter(struct node **q,int m,int n)
{
struct node *temp,*r,*s;
int i;
temp=*q;
for(i=1;i<m;i++)
temp=temp->link;
s=temp->link;
r=(struct node*)malloc(sizeof(struct node));
r->data=n;
r->link=temp->link;
r->pre=temp;
temp->link=r;
s->pre=r;
}
*/

/*display(struct node **q)
{
struct node *temp;
temp=*q;
while(temp!=NULL)
{
printf("\n  %d\n",temp->data);
temp=temp->link;
}
}
*/
delete(struct node **q,int n)
{
struct node *temp,*old,*s;
temp=*q;
while(temp!=NULL)
{
        if(temp->data=n)
        {
                        if(temp == *q)
                        {
                        *q=temp->link;
                        free(temp);
                        return;
                        }
                        else
                        {
                //      s=temp->link;
                         old->link=temp->link;
                //      s->pre=old; 
                        free(temp);
                         return;
                      }
        }
        else
        {
        old=temp;
        temp=temp->link;
        }

}
printf("data not found");

}
display(struct node **q)
{
struct node *temp;
temp=*q;
while(temp!=NULL)
{
printf("\n  %d\n",temp->data);
temp=temp->link;
}
}
#包括
#包括
结构节点
{
int数据;
结构节点*pre;
结构节点*链接;
};
//void addafter(结构节点*,int,int);
main()
{
结构节点*p=NULL;
加上(&p,2);
添加(p&p,3);
添加(p&p,4);
添加(p&p,5);
加上(&p,6);
加上(p,27);;
加上(&p,8);
添加(p&p,9);
加上(&p,10);
//ADDFAFTER(&p,7,20);
删除(&p,6);
显示(&p);
}
添加(结构节点**q,整数n)
{
结构节点*temp,*r;
温度=*q;
if(temp==NULL)
{
temp=(结构节点*)malloc(sizeof(结构节点));
temp->pre=NULL;
温度->数据=n;
temp->link=NULL;
#包括
#包括
结构节点
{
int数据;
结构节点*pre;
结构节点*链接;
};
//void addafter(结构节点*,int,int);
main()
{
结构节点*p=NULL;
加上(&p,2);
添加(p&p,3);
添加(p&p,4);
添加(p&p,5);
加上(&p,6);
加上(p,27);;
加上(&p,8);
添加(p&p,9);
加上(&p,10);
//ADDFAFTER(&p,7,20);
删除(&p,6);
显示(&p);
}
添加(结构节点**q,整数n)
{
结构节点*temp,*r;
温度=*q;
if(temp==NULL)
{
temp=(结构节点*)malloc(sizeof(结构节点));
temp->pre=NULL;
温度->数据=n;
temp->link=NULL;
*q=温度;
}
其他的
{
while(临时->链接!=NULL)
温度=温度->链接;
r=(结构节点*)malloc(sizeof(结构节点));
r->pre=温度;
r->data=n;
r->link=NULL;
温度->链接=r;
}
}
/*
addafter(结构节点**q、int m、int n)
{
结构节点*temp,*r,*s;
int i;
温度=*q;
对于(i=1;ilink;
s=温度->链接;
r=(结构节点*)malloc(sizeof(结构节点));
r->data=n;
r->link=temp->link;
r->pre=温度;
温度->链接=r;
s->pre=r;
}
*/
/*显示(结构节点**q)
{
结构节点*temp;
温度=*q;
while(temp!=NULL)
{
printf(“\n%d\n”,临时->数据);
温度=温度->链接;
}
}
*/
删除(结构节点**q,int n)
{
结构节点*temp,*old,*s;
温度=*q;
while(temp!=NULL)
{
如果(临时->数据=n)
{
如果(温度==*q)
{
*q=温度->链接;
免费(临时);
回来
}
其他的
{
//s=温度->链接;
旧->链接=临时->链接;
//s->pre=旧;
免费(临时);
回来
}
}
其他的
{
旧=临时;
温度=温度->链接;
}
}
printf(“未找到数据”);
}
显示(结构节点**q)
{
结构节点*temp;
温度=*q;
while(temp!=NULL)
{
printf(“\n%d\n”,临时->数据);
温度=温度->链接;
}
}

乍一看,我发现了这个错误:

old->link=temp->link;
temp->link->pre=temp->pre; // or old.
free(temp);

您还应该为下一个和上一个节点设置指针。您可以在add方法中进行此更改,这也是错误的。

您可能需要先进行一些重新格式化工作,尝试将代码包装在标记中,或将其缩进4个空格。