[求助]关于双向链表的建立
#include<stdio.h>
//定义双向链表?
typedef struct dupnode{
int data;
struct dupnode *prior,*next;
}DUP;
//创建双向链表
DUP *create(void){
int n,m;
DUP *head,*p,*q,*a;
p=(DUP *)malloc(sizeof(DUP));
head=p;
p->next=p;
p->prior=p;
printf("Input the num of dup:");
scanf("%d",&n);
if(n<=0) printf("error");
else{
printf("Input the dup:");
while(n>0){
scanf("%d",&m);
a=(DUP *)malloc(sizeof(DUP));
if(p->next==p&&p->prior==p){
a->next=p;
p->next=a;
a->prior=p;
p->prior=a;
q=a;
}
else{
q->next=a;
a->next=p;
p->prior=a;
a->prior=q;
q=a;
}
scanf("%d",a->data);
}}
return(head);
}
这个是我模仿网络上的写法和自己的理解写下的
但是最后一对if和else我始终没有理解
[解决办法]
- C/C++ code
if(p-> next==p&&p-> prior==p){//这句意思是:如果插入节点是在头节点之后的情况,注意q是指向指针尾部的 a-> next=p; p-> next=a; a-> prior=p; p-> prior=a; q=a; } else{//当插入的不是头节点之后的情况,让q(尾部节点)next指向新建节点,建立双向节点 q-> next=a; a-> next=p; p-> prior=a; a-> prior=q; q=a; } scanf("%d",a-> data); }}