#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node * prior;
struct node * next;
}NODE,*PNODE;
PNODE createList(PNODE);
void travelList(PNODE);
void insertList(PNODE,int,int);
int lengthList(PNODE);
void delList(PNODE,int,int *);
void main()
{
//头结点是需要造出来的,给他分配空间
PNODE phead=(PNODE)malloc(sizeof(NODE));
if(NULL==phead)
{
printf("内存分配失败");
exit(-1);
}
phead->next=NULL;
phead->prior=NULL;
//创建双链表
phead=createList(phead);
//遍历双链表
travelList(phead);
printf("\n");
//链表的插入
insertList(phead,2,3);
//遍历双链表
travelList(phead);
printf("\n");
printf("开始准备删除结点\n");
int val;
//链表结点删除
delList(phead,2,&val);
//遍历双链表
travelList(phead);
printf("\n");
}
PNODE createList(PNODE phead)
{
int len;
int val;
PNODE p=phead;
printf("请输入要初始化结点的个数:");
scanf("%d",&len);
for(int i=0;i<len;i++)
{
PNODE pnew=(PNODE)malloc(sizeof(NODE));
if(pnew==NULL)
{
printf("内存分配失败");
exit(-1);
}
printf("请输入给当前第%d个结点赋值",i+1);
scanf("%d",&val);
pnew->data=val;
pnew->prior=NULL;
pnew->next=NULL;
pnew->next=p->next;
pnew->prior=p;
p->next=pnew;
p=pnew;
}
return phead;
}
void delList(PNODE phead,int pos,int *val)
{
int i=0;
PNODE p=phead;
if(p==NULL||pos<1||pos>lengthList(phead))
{
printf("无法删除,删除不合法");
return;
}
while(i<pos-1)
{
p=p->next;
i++;
}
PNODE q=p->next;
*val=q->data;
printf("%d ",*val);
p->next=p->next->next;
p->next->prior=p;
free(q);
}
void travelList(PNODE phead)
{
PNODE pnew=phead->next;
while(pnew!=NULL)
{
printf("%d ",pnew->data);
pnew=pnew->next;
}
}
void insertList(PNODE phead,int pos,int val)
{
PNODE p=phead;
int i=0;
if(p==NULL||pos<1||pos>lengthList(phead))
{
printf("无法插入结点,不合法");
exit(-1);
}
while(i<pos-1)
{
p=p->next;
i++;
}
//初始化结点
PNODE pnew=(PNODE)malloc(sizeof(NODE));
pnew->data=val;
pnew->next=NULL;
pnew->prior=NULL;
//准备插入结点
pnew->next=p->next;
p->next->prior=pnew;
pnew->prior=p;
p->next=pnew;
}
int lengthList(PNODE phead)
{
PNODE pnew=phead;
int i=0;
while(pnew!=NULL)
{
pnew=pnew->next;
i++;
}
return i;
}