尾插法动态创建链表

分为两种,头会变(一开始就是空链表,新节点插入后变成头节点),头不变。

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 
  4 struct test
  5 {
  6         int data;
  7         struct test *next;
  8 };
  9 
 10 void printLink(struct test *head)
 11 {
 12         struct test *point = head;
 13         while(point !=NULL ){
 14                 printf("%d ",point->data);
 15                 point = point->next;
 16         }
 17         putchar('\n');
 18 }
 19 
 20 struct test* insertFromHead(struct test *head,struct test *new)
 21 {
 22         if(head==NULL){
 23                 head = new;
 24         }else{
 25                 new->next=head;
 26                 head=new;
 27         }
 28         return head;
 29 
 30 }
 31 
 32 struct test* insertFromBehind(struct test *head,struct test *new)
 33 {
 34         struct test *point=head;
 35         if(head==NULL){
 36                 head=new;
 37         }else{
 38                 while(point->next!=NULL){
 39                         point=point->next;
 40                 }
 41                 point->next=new;
 42         }
 43         return head;
 44 }
 45 
 46 struct test* createLink(struct test *head)
 47 {
 48         struct test *new=NULL;
 49 
 50         while(1){
 51                 new =(struct test*)malloc(sizeof(struct test*));
 52                 printf("please input a new \n");
 53                 scanf("%d",&(new->data));
 54                 if(new->data==0){
 55                         free(new);
 56                         return head;
 57                 }
 58                 else{
 59                         head=insertFromHead(head,new);
 60                 }
 61         }
 62 }
 63 
 64 struct test* createLink2(struct test *head)
 65 {
 66         struct test *new=NULL;
 67 
 68         while(1){
 69                 new =(struct test*)malloc(sizeof(struct test*));
 70                 printf("please input a new \n");
 71                 scanf("%d",&(new->data));
 72                 if(new->data==0){
 73                         free(new);
 74                         return head;
 75                 }
 76                 else{
 77                         head=insertFromBehind(head,new);
 78                 }
 79         }
 80 }
 81 
 82 int main()
 83 {
 84         struct test *head=NULL;
 85         head = createLink2(head);
 86         printf("result:\n");
 87         printLink(head);
 88 
 89         struct test t1={100,NULL};
 90         head = insertFromHead(head,&t1);
 91         printf("result2:\n");
 92         printLink(head);
 93 
 94         struct test t2={200,NULL};
 95         head = insertFromBehind(head,&t2);
 96         printf("result3:\n");
 97         printLink(head);
 98 
 99         return 0;
100 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值