单向链表插入实现

来源:互联网 发布:javascript菜鸟教程 编辑:程序博客网 时间:2024/05/22 01:36
#include <stdlib.h>#include <stdio.h>struct list {int data;struct list *next;};struct list *list_search(struct list *first, int d){struct list *p = first;while(p){if (p->data == d){break;}p = p->next;}return p;}int list_insert(struct list **first, int d){struct list *i = NULL, *l = NULL;if (list_search(*first, d)){return 1;}i = (struct list*)malloc(sizeof(struct list*));if (i == NULL){return 0;}i->data = d;i->next = NULL;if (*first  == NULL){*first  = i;}else{l = *first ;while(l->next){l = l->next;}l->next = i;}return 1;}void list_print(struct list *first){struct list *p = first;printf("list:\n");while (p){printf("%d ", p->data);p = p->next;}printf("\n");}void list_reverse(struct list **first){struct list *last = NULL;struct list *curr = *first;struct list *t = NULL;while (curr){t = curr->next;curr->next = last;last = curr;curr = t;}*first  = last;}int main(){int array[8] = {9, 0, 0, 12, 1, 1, 81, 66};int i;struct list *l = NULL;for (i=0; i<8; i++){if (list_insert(&l, array[i]) != 1){printf("list insert error.\n");}}list_print(l);list_reverse(&l);list_print(l);}




0 0