链表的三种创建形式

Posted farytormenta

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表的三种创建形式相关的知识,希望对你有一定的参考价值。

刚刚学习完链表,总结了三种链表的创建方式,从表前插入节点,从表后插入节点和它的进化版??

#include <stdio.h>

#include <stdlib.h>

 

typedef struct node

    char data;

    struct node *next;

linkList;

 //下面??的是从前面插入,但是缺点比较明显,因为链表的顺序和你输入的顺序是相反的。。。推荐使用后面的

linkList *CreatList_1()

    char ch;

    linkList *head = NULL,*s = NULL;

    ch = getchar();

    while(ch!=‘$‘)

   

        s = (linkList *)malloc(sizeof(linkList));

        s->data = ch;

        s->next = head;

        head = s;

    char a = getchar();

    ch = getchar();

   

    return head;

//这是从后面插入的初级形式

linkList *CreatList_2()

    char ch;

    linkList *head,*s,*r = NULL;

    head = NULL;

    s = NULL;

    ch = getchar();

    while(ch!=‘$‘)

   

        s = (linkList *)malloc(sizeof(linkList));

        s->data = ch;

        if(head==NULL)head = s;

        else r->next = s;

        r = s;

    char a = getchar(); 

        ch = getchar();

   

    if(r!=NULL)r->next = NULL;

    return head;

当当当当,下面是高级形式,头节点是一个不含数据的空节点,从第二个节点开始储存数据,这样刚好对应1,2,3。。。的顺序,并且少了if(r!=NULL)的判断语句。

linkList *CreatList_3()

    char ch;

    linkList *head, *s, *r;

    head = (linkList *)malloc(sizeof(linkList));

    r = head;

    ch = getchar();

    while(ch!=‘$‘)

   

        s = (linkList *)malloc(sizeof(linkList));

        s->data = ch;

        r->next = s;

        r = s;

        char a = getchar();

        ch = getchar();

   

    r->next = NULL;

    return head;

 

linkList *GET(linkList *head,int i)

    int j = 0;

    linkList *p;

    p = head;

    while((p->next!=NULL)&&(j<i))

   

        p = p->next;

        j++;

   

    if(i == j)return p;

    else return NULL;

最后要注意的一个关键点,在创建循环的每一个ch = getchar()前要加一句 char a = getchar(),用来吸收输入数据时隔开每一个数据的空格

不然就会出现每两个有用的节点间出现空节点的现象。

以上是关于链表的三种创建形式的主要内容,如果未能解决你的问题,请参考以下文章

总结逆置双向链表的三种方法

表插入排序算法

链表的三种插入排序+冒泡排序

ios中block的三种形式

基础Linux命令总结

JSJavaScript 脚本的三种使用形式:行内脚本内部脚本外部脚本