输入以 -1 作为结束标志的整数序列(以空格分隔),将它们作为结点的数值,建立一个双向链表。分别从头到尾、从尾到头输出这些链表数据。
C语言代码清单 1:创建双向链表并从两个方向分别输出链表数据
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
struct node
{
int data;
struct node *next, *pre;
} *head, *tail, *p, *new; //定义链表结点指针
int main( )
{
int c;
printf("请输入以空格分隔的若干整数(-1结束输入):");
head = malloc(sizeof(struct node)); //创建初始链表
head->next = NULL; head->pre = NULL; //初始化头结点指针域
head->data = scanf("%d",&c); //初始化头结点数值域
p = head; //当前指针赋值
scanf("%d",&c);
while(c != -1){ //循环插入结点
new = malloc(sizeof(struct node));
new->data = c; //新结点数值域赋值
new->next = NULL; //新结点后继指针指向为空
new->pre = p; //新结点前驱指针指向当前结点 p
p->next =new; //当前结点 p 的后继指针指向新结点
p = new; //当前结点指针重置为新插入的结点
scanf("%d",&c);
}
tail = p;
for(p=head; p!=NULL; p=p->next) //从头到尾打印结点数据
printf("%d ",p->data);
printf("\n");
for(p=tail; p!=NULL; p=p->pre) //从尾到头打印结点数据
printf("%d ",p->data);
system("pause");
return 0;
}
运行结果为:
请输入以空格分隔的若干整数(-1结束输入):8 48 2 6 7 334 -1
1 48 2 6 7 334
334 7 6 2 48 1