输入以 -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