看一张图:
结构体有一个前驱指针和一个后继指针,记录一下前后地址就ok了,稍微注意一下指针之间指来指去的,别搞乱。
撸代码:
/*双向链表的建立*/
#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
struct node
{
int data;
node *nex,*prior;
};
void doublelist(node *head,int n)
{
node *a=head;
while(n)
{
n--;
node *q=new node;
scanf("%d",&q->data);
a->nex=q;/*a的后继是q*/
q->prior=a;/*q的前驱是a*/
q->nex=head;/*q的后继是头*/
head->prior=q;/*头的前驱是尾*/
a=q;
}
return ;
}
void check(node *head)
{
node *a=head->nex;
while(a!=head)
{
printf("%d last=%d next=%d\n",a->data,a->prior->data,a->nex->data);
a=a->nex;
}
return;
}
int main()
{
int n;
scanf("%d",&n);
node *head=new node;
head->nex=head;
head->prior=head;
doublelist(head,n);
check(head);
return 0;
}