双向链表的第个结点有两个指针,分别指向其直接前驱结点和直接后驱结点。这样就可以从表中任意的元素结点出发,从两个方向遍历链表。
1、双向链表结构体声明
typedef struct Node
{
int data;
struct Node *front;
struct Node *next;
}Node;
2、尾插法构造带头结点双向链表
Node * createDLL_ByTail()//尾插法构造带头结点的双向链表
{
Node *p,*r,*head;
int x;
head=(Node *)malloc(sizeof(Node));
head->front=NULL;
r=head;
while(scanf("%d",&x)!=EOF)
{
p=(Node *)malloc(sizeof(Node));
p->data=x;
r->next=p;
p->front=r;
r=p;
}
r->next=NULL;
return head;
}
结尾的r->next=NULL;一定不能少。不然出现内存泄露。
3、头插法构造带头结点双向链表
Node * createDLL_ByHead()//头插法构造带头结点的双向链表
{
Node *p,*r,*head;
int x;
head=(No