创建一个单循环链表

1 题目

功能:创建一个单循环链表 描述:输入链表中各个结点中的值,然后进行进行整合成单循环链表进行输出

2 思路

一个循环链表是从简单的链表中发展而来,简单链表带来的弊端是,必须要保存头结点才能不断的遍历链表,否则当遍历到 结点尾部的时候,便没办法进行后续的工作。 简单循环链表带来的优势是,当遍历到链表尾部的时候,由于尾部的next指针指向头部,所以是要比简单的单链表灵活一些的

3 代码

#include <stdio.h> 
#include <stdlib.h>
#include <string.h>

/**
功能:创建一个单循环链表
描述:输入链表中各个结点中的值,然后进行进行整合成单循环链表进行输出
**/

typedef struct Node {
    char num;
    struct Node *next;
} LNode, *LinkList;

LinkList create(void) {

    LinkList head;
    LNode *p1,  *p2;
    char a;
    head = NULL;
    a = getchar();
    while (a != '#') {
        p1 = (LNode*)malloc(sizeof(LNode));   // 分配空间
        p1->num = a;        // 数据域赋值
        if (head == NULL)
            head = p1;
        else
            p2->next = p1;
        p2 = p1;
        a = getchar();
    }
    p2->next = head;        // 尾节点指向头结点
    return head;
}

int main(int argc, char const *argv[]) { 

    LinkList L1, head;
    printf("请输入循环链表:(以 # 结束)\n");
    L1 = create();          // 创建循环链表
    head = L1;
    printf("形成的循环链表是:\n");
    printf("%c -> ", L1->num);
    L1 = L1->next;          // 指向下一个结点
    while (L1 != head) {      // 判断条件为循环到头结点结束
       
        printf("%c -> ", L1->num);
        L1 = L1->next;
    }
  printf("\n");
}

示例结果:

$ gcc ex072.c -o demo
$ ./demo
请输入循环链表:(以 # 结束)
apple#
形成的循环链表是:
a -> p -> p -> l -> e ->
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容