双向链表

这本是翁恺老师的MOOC链表的一道练习题。就想尝试一下忠豪提过的双向链表解决,感觉只要理解了单向链表的操作,双向还是很简单的。其实双向链表的结构体也很简单:

struct double_list{
     int value;
     double_list *prev;
     double_list *next
} DOUBLE_LIST;

这道题目是这样的:输入一系列数据(不知道要输入几个),当输入-1后停止(并不计算-1为输入数据),然后逆序输出这些数据。

代码如下:

#include <stdio.h>
#include <stdlib.h>
typedef struct Link_List{
    int value;
    struct Link_List *prev;
    struct Link_List *next;
} DOUBLE_LINK;
typedef struct Link_List2{
    DOUBLE_LINK *head;
    DOUBLE_LINK *tail;
} LINK;
int main()
{
    LINK list;
    list.head=list.tail=NULL;
    DOUBLE_LINK *p=NULL,*q=NULL;
    int n;
    while(1)
    {
        scanf("%d",&n);
        if(n==-1)
            break;
        p=(DOUBLE_LINK *)malloc(sizeof(DOUBLE_LINK));
        p->value=n;
        p->next=NULL;
        p->prev=NULL;
        if(list.head==NULL)
        {
            list.head=p;
            list.tail=p;
        }
        else{
            q=list.tail;
            list.tail=p;
            q->next=list.tail;
            list.tail->prev=q;
        }
    }
    for(p=list.tail;p;p=p->prev)
        printf("%d ",p->value);
    return 0;
}
posted @ 2015-12-20 20:02  小白酷狗  阅读(157)  评论(0编辑  收藏  举报