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);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容