读书人

[]关于双向链表的建立

发布时间: 2012-03-07 09:13:51 作者: rapoo

[求助]关于双向链表的建立
#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);    }} 

读书人网 >C语言

热点推荐