双向链表定义
#define bool int
#define true 1
#define false 0
typedef struct DLNode
{
struct DLNode *next;
struct DLNode *prior;
int data;
}DLNode,*DLinkList;
初始化双向链表(前插值)
DLinkList InitDLinkList(DLinkList L)
{
L=(DLinkList)malloc(sizeof(DLinkList));
int e;
DLNode *node=L;
node->next=NULL;
node->prior=NULL;
scanf("%d",&e);
while(e!=9999)
{
DLNode *newNode=(DLNode *)malloc(sizeof(DLNode));
newNode->data=e;
newNode->next=node->next;
newNode->prior=node;
node->next=newNode;
scanf("%d",&e);
}
return node;
}
打印双向链表
void PrintDLinkList(DLinkList L)
{
int i=1;
DLNode *node=L->next;
while(node!=NULL)
{
printf("输出链表第%d位数值:%d\n",i,node->data);
node=node->next;
i++;
}
}
在p节点后插入s节点
void InsertNextNode(DLNode *p,DLNode *s)
{
s->next=p->next;
if(p->next!=NULL)
p->next->prior=s;
s->prior=p;
p->next=s;
}
删除当前节点的后继节点
bool DeleteNextNode(DLNode *p)
{
if(p==NULL)return false;
DLNode *q=p->next;
if(q!=NULL)
p->next=q->next;
if(q->next!=NULL)
q->next->prior=p;
free(q);
return true;
}
删除整个链表
bool DeleteDLinkList(DLinkList L)
{
while(L->next!=NULL)
{
DeleteNextNode(L);
}
return true;
}