标签:
数据结构实验之链表二:逆序建立链表# include <stdio.h> # include <stdlib.h> typedef int Elem ; typedef struct node{ Elem data; Elem *next; } Node; Node *create_linkedlist(int n); void show(Node *head); void destroy(Node *head); int main() { int n; scanf("%d",&n); Node *head; head = create_linkedlist(n); show(head); destroy(head); return 0; } Node *create_linkedlist(int n) { Node *head; Node *p; Elem key; head = (Node*)malloc(sizeof(Node)); head->next = NULL; while(n--) { scanf("%d",&key); p = (Node*)malloc(sizeof(Node)); p->data = key; /*逆序就是始终在头结点之后插入,所以新增节点先连上head之后的节点*/ p->next = head->next; /*之后再在头节点后挂上新增节点*/ head->next = p; } return head; } void show(Node *head) { Node *p; p = head->next; while(p) { printf("%d ",p->data); p = p->next; } } void destroy(Node *head) { Node *p; Node *q; p = head->next; while(p) { q=p; /*刚开始我把1 2 颠倒了发现程序死在了销毁上 问了之后才明白如果2先执行被销毁的结点所含下一个结点的地址就找不到了*/ p = p->next;//1 free(q);//2 } }
标签:
原文地址:http://blog.csdn.net/power_to_go/article/details/51331524