C/C++ 创建链表

        面试中经常碰到要创建链表的题目,今天做个小总结:

1.创建链表(头插法)

  该程序完成了建立个各节点的链表,并将链表数据初始化为整数的程序,且该链表为无头结点的链表,代码如下:

#include <math.h>
typedef int datatype;                                                           //假设建立的链表数据整型数据
typedef struct node                                                             //定义节点
{ datatype data;
  struct node * next;
}linklist;
linklist * creat(linklist * head,int n)
{ linklist * p;
 int i;
 srand(time(0));                                                                  //初始化随机数种子
 head=NULL;
 for(i=0;i<n;i++)
 { p=(linklist *)malloc(sizeof(linklist));                                   //生成一个新节点,并返回节点指针
  p->data=rand()%100;                                                       //给节点数据赋初值
  p->next=head;
  head=p;                          
 }
 return head;
}


2.创建链表(尾插法)

//VC++运行正常,输入字符型数据来创建节点,以‘#’来结束创建。
#include <stdio.h>
#include <math.h>
typedef char datatype;                                             //假设建立的链表数据整型数据
typedef struct node                                                  //定义节点
{    datatype data;
     struct node * next;
}linklist;
linklist * creatlist(linklist * head);                               //声明创建链表的函数
 main()
{        linklist * q;
         linklist * head;
         printf("请输入字符来创建链表,以'#'来结束:\n");
         q=creatlist(head);
         while(q->next!=NULL)
         { printf("\n %c",q->data);
         q=q->next;
         printf("\n");
 }
}
linklist * creatlist(linklist * head)
{    char ch;
     linklist * p;
     linklist * e;                                                       //定义指向尾部的指针
     head=NULL;
     e=NULL;
     ch=getchar();
     while('#'!=ch)
      {   p=(linklist *)malloc(sizeof(linklist));               //生成新节点并返回节点指针
          p->data=ch;                                                 //给节点数据赋初值
          if(NULL==head)
               head=p;
         else
              e->next=p;
         e=p;
         ch=getchar();
      }
      if(NULL!=e)
            e->next=NULL;
      return head;
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值