说明
**双链表就是在单链表结点上增添了一个指针域,指向当前结点的前驱。这样就可以方便的由其后继来找到其前驱,而实现输出终端结点到开始结点的数据序列。**
初始化
void InitList(LinkList &L)
{
L=new node;
L->next=NULL;
L->prior=NULL;
}
尾插法创建链表
void CreateLinkE(LinkList &L)
{
int n,m;
LinkList s;
LinkList r=L;
cout<<"please input a number:";
cin>>n;
for(int i=0;i<n;i++)
{
s=new node;
cin>>m;
s->data=m;
r->next=s;
s->prior=r;
r=s;
}
r->next=NULL;
}
添加新结点
void InsertLink(LinkList &L,int i,int e)
{
LinkList p=L;
int j=1;
while(p!=NULL&&j<i)
{
p=p->next;
j++;
}
if(p==NULL&&j>i-1)
{
cout<<"false";
}
else
{
LinkList s=new node;
s->data = e;
s->next=p->next;
s->prior=p->next->prior;
p->next=s;
s->next->prior=s;
}
}
删除结点
void Linkdelete(LinkList &L ,int i)
{
int j=1;
LinkList p=L;
while(j<i&&p!=NULL)
{
p=p->next;
j++;
}
if(p==NULL&&j>i-1)
{
cout<<"false";
}
else
{
LinkList q=p->next;
p->next=q->next;
q->next->prior=p;
delete q;
}
}
遍历
void coutprint(LinkList L)
{
LinkList p=L->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
}
完整代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef struct node
{
int data;
struct node *prior;
struct node *next;
}*LinkList;
void InitList(LinkList &L)
{
L=new node;
L->next=NULL;
L->prior=NULL;
}
void CreateLinkE(LinkList &L)
{
int n,m;
LinkList s;
LinkList r=L;
cout<<"please input a number:";
cin>>n;
for(int i=0;i<n;i++)
{
s=new node;
cin>>m;
s->data=m;
r->next=s;
s->prior=r;
r=s;
}
r->next=NULL;
}
void InsertLink(LinkList &L,int i,int e)
{
LinkList p=L;
int j=1;
while(p!=NULL&&j<i)
{
p=p->next;
j++;
}
if(p==NULL&&j>i-1)
{
cout<<"false";
}
else
{
LinkList s=new node;
s->data = e;
s->next=p->next;
s->prior=p->next->prior;
p->next=s;
s->next->prior=s;
}
}
void Linkdelete(LinkList &L ,int i)
{
int j=1;
LinkList p=L;
while(j<i&&p!=NULL)
{
p=p->next;
j++;
}
LinkList q=p->next;
p->next=q->next;
q->next->prior=p;
delete q;
}
void coutprint(LinkList L)
{
LinkList p=L->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
}
int main(void)
{
LinkList L;
InitList(L);
CreateLinkE(L);
InsertLink(L,1,89);
Linkdelete(L,2);
coutprint(L);
return 0;
}