链表之循环单链表(用C语言描述)


上回说到建立链表的三种形式,分别是头插法,尾插法,和尾插法MAX😂

👇下面讲一下循环单链表👇

循环单链表,字面意思,就是单链表循环了起来,尾节点在输入结束后不会指向NULL,而是指向了头节点head

酱紫,链表就循环了起来

下面是代码实现

#include <stdio.h>

#include <stdlib.h>

typedef char datatype;

typedef struct node

{

    datatype data;

    struct node *next;

    int length;

}linkList;

 

linkList *CREAT(linkList *L)

{

    L->length = 0;

    linkList *head,*r,*s;

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

    r = head;

    char ch;

    ch = getchar();

    while(ch!='$')

    {

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

        L->length++;

        s->data = ch;

        r->next = s;

        r = s;

        s->next = head;

//        char a = getchar();

//        如果使用上面这一句,在输入data的时候可以在两个字符间输入空格

        ch = getchar();

    };

    return r;

}

 

void PUT(linkList *L,linkList *r)

{

    int i = 0;

    linkList *pt;

    pt = r;

    pt = pt->next->next;

    while(i<L->length)

//如果你想测试一下自己写的代码会不会循环起来,可以给length+2以上,看看会不会输出

//因为在CREAT()的时候,我是用的是尾插法MAX😂,就是在整个链表的前面加上一个空的节点,所以输出不会显示这个节点的内容

    {

        printf("%c ",pt->data);

        pt = pt->next;

        i++;

    };

    printf("\n");

}

 

int main(void)

{

    linkList L;

    PUT(&L,CREAT(&L));

    return 0;

}

//这个代码的算法实现都是比较简单易懂的,如果不是很清楚链表是怎样构建的话,可以康一康我的上一篇blog

//希望能对初学数据结构的同学们有一点帮助


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM