#include<stdio.h>
#include<malloc.h>
//双向链表的结构体
typedef struct DNode{
int data;
struct DNode *prior;
struct DNode *next;
}DNode,*DLinkList;
//双向链表的创建操作
void createList(DLinkList &L){
DLinkList s,p;//用来存放新的节点信息
L = (DLinkList)malloc(sizeof(DNode));
L->prior = NULL;
L->next = NULL;
p = L;
int x;//用来接收新的值
scanf("%d",&x);
while(x!=-1){
s = (DLinkList)malloc(sizeof(DNode));
s->data = x;
p->next = s;
s->prior = p;
p = s;
scanf("%d",&x);
}
p->next = NULL;
}
//查找元素(按序号查找)
DLinkList findById(DLinkList L,int n) {
int j = 1;
DLinkList p = L->next;
if(n==0){
return L;
}
while(p&&j<n){
p = p->next;
j++;
}
return p;
}
//删除元素(按序号删除)
void deleteList(DLinkList &L,int i){
DLinkList p = (DLinkList)malloc(sizeof(DNode));
DLinkList s;
p = findById(L,i-1);
s = p->next;
p->next = s->next;
s->next->prior = p;
free(s);
}
//插入元素(按序号插入)
void insertList(DLinkList &L,int i,int e){
DLinkList p = findById(L,i-1);
DLinkList s = (DLinkList)malloc(sizeof(DNode));
s->data = e;
s->next = p->next;
s->prior = p;
p->next =s;
p->next->prior = s;
}
//显示链表中的元素
void show(DLinkList L){
DLinkList p = L->next;
while(p){
printf("%d ",p->data);
p = p->next;
}
}
int main(){
DLinkList L,find;
createList(L);
// show(L);
//测试查找方法
// find = findById(L,3);
// printf("%d",find->data);
// deleteList(L,3);
// show(L);
insertList(L,3,9999);
show(L);
return 0;
}