//双链表结点定义
#include<stdio.h>
#include<stdlib.h>
typedef int elem;
typedef struct Lnode {
elem *date;
struct Lnode *next,*prior
}Lnode,*list;
list creat(list &L)
{
int x;
L = (list)malloc(sizeof(Lnode));
L->next = NULL;
Lnode *s, *r = L;
scanf("%d", &x);
while (x != 9999)
{
s = (list)malloc(sizeof(Lnode));
s->date = x;
r->next = s;
s->prior = r;//这里只多了一句
r = s;
scanf("%d", &x);
}
r->next = NULL;
return L;
}Lnode *get1(Lnode L, int i)
{
int j=1;
Lnode *p = L->next;
if(i == 0)
{
return NULL;
}
if(i < 1)
{
return 0;
}
while(p&&j < i)
{
p = p->next;
j++
}
return p, j;
}
list insert(list &L, int i)
{
Lnode *p, *s;
p = get1(L, i - 1);
int x;
scanf("%d", &x);
s = (list)malloc(sizeof(Lnode));
s->date = x;
s->next = p->next;
p->next->prior = s;
s->prior = p;
p->next = s;
}
/*下面为在p的前面插入结点s
Lnode *insert(Lnode &L,int i)
{
Lnode *s,*p=L;
int x;
scanf("%d",&x);
p=get1(L,i+1)
s=(Lnode*)malloc(sizeof(Lnode));
s->data=x;
s->prior=p->prior;
p->prior->next=s;
s->next=p;
p->prior=s;
*/
list delect(list &L, int i)
{
Lnode *p=L, *q=L;
p = get1(L, i - 1);
q = get1(L, i);
p->next = q->next;
q->next->prior = p;//删除p的后驱结点q
free(q);
}
/* list delect(list &L,int i)
{
Lnode *p,*q;
p=get1(L,i-1);
q=get1(L,i);
下面为删除q的前驱节点p
q->prior=p->prior;
p->prior->next=q;
free(p);
}*/