双向链表
这本是翁恺老师的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; }