首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

[]关于双向链表的建立

2012-03-07 
[求助]关于双向链表的建立#includestdio.h//定义双向链表?typedef struct dupnode{int datastruct dupn

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

热点排行