#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
////////////////////////////////////////////
//定义结点类型
typedef struct DulNode
{
ElemType data; //单链表中的数据域
struct DulNode *next;
struct DulNode *prior; //单链表的指针域
}DulNode,*LinkedList;
LinkedList LinkedListcreat()
{
LinkedList L;
L = (DulNode*)malloc(sizeof(DulNode));
L->next = L;
L->prior =L;
DulNode *r;
r = L;
ElemType x; //x为链表数据域中的数据
while(scanf("%d",&x) != EOF)
{
DulNode *p;
p = (DulNode*)malloc(sizeof(DulNode)); //申请新的结点
p->data = x; //结点数据域赋值
r->next = p; //将结点插入到表头L-->|1|-->|2|-->NULL
p->prior = r;
r = p;
}
r->next = NULL;
return L;
}
LinkedList LinkedListinsert(LinkedList L,int i,ElemType x)
{
DulNode *per;
per = L;
int tempi=0;
for (tempi=1;tempi<i;tempi++){
per=per->next;
}
DulNode *p;
p=(DulNode*)malloc(sizeof(DulNode));
p->data=x;
p->next =per->next;
per->next->prior=p;
per->next=p;
p->prior=per;
return L;
}
LinkedList LinkedListDelete(LinkedList L)
{
DulNode *p,*pre;
p=L->next;
int i;
scanf("%d",&i);
while(p->data!=i)
{
pre=p;
p = p->next;
}
pre->next=p->next;
p->next->prior=pre;
free(p);
return L;
}
int main(){
LinkedList list,start;
printf("please input number\n");
list = LinkedListcreat();
for(start=list->next;start!=NULL;start=start->next)
printf("%d",start->data);
int i;
ElemType x;
printf("请输入插入数据的位置:");
scanf("%d",&i);
printf("请输入插入数据的值:");
scanf("%d",&x);
LinkedListinsert(list,i,x);
for(start = list->next; start != NULL; start = start->next)
printf("%d ",start->data);
printf("\n");
printf("请输入要删除的元素的值:");
LinkedListDelete(list);
for(start = list->next; start != NULL; start = start->next)
printf("%d ",start->data);
printf("\n");
}