C语言双向链表的创建

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