C语言双向链表的创建
输入以 -1 作为结束标志的整数序列(以空格分隔),将它们作为结点的数值,建立一个双向链表。分别从头到尾、从尾到头输出这些链表数据。
C语言代码清单 1:创建双向链表并从两个方向分别输出链表数据
运行结果为:
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
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
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。