c语言创建单链表两种方法的区别与联系

单链表:

NO.1 头插法

每次从表头插入新节点,具体过程:先开辟表头指针,然后陆续为每个数据元素开辟存储空间并赋值,让该节点作为首元节点,原

来的首元节点作为他的后继节点。

接下来看看代码  

第一是尾插法:

void createlist (node *h)//尾插法创建单链表
{
    int num;
   while(scanf("%d",&num),num!=0)
   {

  node *p =(node*)malloc(sizeof(node));
       p->data=num;
       h->next=p;
       h=p;
   }
h->next=NULL;
}

惊奇的发现 输出的时候是正序输出的 

 再来看看首插法:

void createlist (node *h)//首插法创建单链表
{
    int num;
   while(scanf("%d",&num),num!=0)
   {

  node *p =(node*)malloc(sizeof(node));
       p->data=num;
       p->next=h->next;
       h->next=p;

   }

}

这是效果:

这个是逆序输出;当然这些都可以调节的。

对于单链表的删除与插入就更简单啦 看看代码:

插入:

void insertlist(node *h)
{
  printf("\n请输入需要插入在几个以及插入的数字\n");
  int i,num,j=0;
  scanf("%d %d",&i,&num);
  node *pre=h;
  while(j<i-1)
  {
      pre=pre->next;
      j++;
  }
  node *p=(node*)malloc(sizeof(node));
  p->data=num;
  p->next=pre->next;
  pre->next=p;
}

删除:

void bocklist(node*h)
{
    printf("请输入需要删除的数字\n");
  node *p,*pre=h;
  int i,j=0;
  scanf("%d",&i);
  while(j<i-1)
  {
      pre=pre->next;
      j++;
  }
  p=pre->next;
  pre->next=p->next;
  free(p);
}
发布了5 篇原创文章 · 获赞 2 · 访问量 134

猜你喜欢

转载自blog.csdn.net/weixin_42432428/article/details/88320848