首页 > 其他分享 >C语言--循环链表

C语言--循环链表

时间:2024-08-19 15:22:29浏览次数:9  
标签:Node current head -- list C语言 链表 newNode next

循环链表实现

循环链表的最后一个节点指向头节点,形成一个环。

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

typedef struct Node {
    int data;
    struct Node *next; // 指向下一个节点
} Node;

typedef struct {
    Node *head; // 头指针
} CircularLinkedList;

// 初始化循环链表
void initList(CircularLinkedList *list) {
    list->head = NULL;
}

// 插入节点
void insert(CircularLinkedList *list, int value) {
    Node *newNode = (Node *)malloc(sizeof(Node));
    newNode->data = value;
    
    if (list->head == NULL) {
        list->head = newNode;
        newNode->next = newNode; // 指向自身
    } else {
        Node *tail = list->head;
        while (tail->next != list->head) {
            tail = tail->next;
        }
        tail->next = newNode;
        newNode->next = list->head;
    }
}

// 打印链表
void printList(CircularLinkedList *list) {
    if (list->head == NULL) return;
    Node *current = list->head;
    do {
        printf("%d ", current->data);
        current = current->next;
    } while (current != list->head);
    printf("\n");
}

// 释放链表
void freeList(CircularLinkedList *list) {
    if (list->head == NULL) return;
    Node *current = list->head;
    Node *temp;
    do {
        temp = current;
        current = current->next;
        free(temp);
    } while (current != list->head);
    list->head = NULL;
}

int main() {
    CircularLinkedList list;
    initList(&list);
    
    insert(&list, 10);
    insert(&list, 20);
    insert(&list, 30);
    
    printList(&list);
    freeList(&list);
    
    return 0;
}

标签:Node,current,head,--,list,C语言,链表,newNode,next
From: https://blog.csdn.net/m0_60936698/article/details/141283538

相关文章

  • 破解树莓派RP2350!获得10000美元的奖励!
    我们认为RP2350这款新型高性能安全微控制器相当安全和坚固。你愿意测试一下这个理论吗?(我们完全承认,只要有足够的时间和资源,任何东西都是可以破解的)。接受挑战!在我们推出RP2350和RaspberryPiPico2之前,我们希望对芯片和软件的安全功能进行一些测试,因此我们与安全测试领......
  • nvm---安装
    安装流程:https://blog.csdn.net/qq_22182989/article/details/125387145 第一步:下载安装nvm第二步:配置环境变量第三步:使用淘宝镜像点开setting.txtnode_mirror:http://npmmirror.com/mirrors/node/npm_mirror:http://registry.npmmirror.com/mirrors/npm/进行......
  • MBR20100FCT-ASEMI无人机专用MBR20100FCT
    编辑:llMBR20100FCT-ASEMI无人机专用MBR20100FCT型号:MBR20100FCT品牌:ASEMI封装:TO-220F批号:最新恢复时间:35ns最大平均正向电流(IF):20A最大循环峰值反向电压(VRRM):100V最大正向电压(VF):0.70V~0.90V工作温度:-65°C~175°C芯片个数:2芯片尺寸:mil正向浪涌电流(IFMS):200AMBR20100FCT......
  • Vue 项目报错Uncaught SyntaxError: Unexpected token < 刷新之后又可以继续访问问题解
    场景:页面打开不操作,前端项目代码更新重新部署后(比如Jenkins发布部署)页面不刷新,操作页面(点击打开弹窗、切换菜单等),页面没有反应,控制台报错 UncaughtSyntaxError:Unexpectedtoken<。这个问题偶现,只有在项目重新部署后会出现,页面刷新后就恢复正常 问题原因:在前端项目未更......
  • Camera MIPI 协议理解
    D-PHY1、传输模式1.LP(Low-Power)模式:用于传输控制信号,最高速率10MHzHS(High-Speed)模式:用于高速传输数据,速率范围[80Mbps,1Gbps]perLane传输的最小单元为1个字节,采用小端(低位字节放到内存的低地址端,高位字节放到内存的高地址端)的方式及LSBfirst,MSBlast(一个芯片的管脚......
  • WPF 类型转换器的实现
    1、MainWindow.xaml<Windowx:Class="WpfApplication1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:sys=&qu......
  • 意向共享锁与意向排它锁:详解与应用
    在数据库系统中,锁机制是保证数据一致性和完整性的关键。除了行级锁和表级锁外,还有一种锁类型,它在数据库的事务处理中扮演着重要的角色——意向锁(IntentionLocks)。在这篇博客中,我们将详细讲解意向共享锁(IntentionSharedLock)和意向排它锁(IntentionExclusiveLock)的概念、作用及......
  • 独立站是什么?独立站的优势是什么?为什么要做独立站?一键三问
    对于跨境电商经营者而言,采取多平台、多站点的运营策略是至关重要的战略布局。这一做法不仅有助于分散风险,避免将所有投资集中于单一市场,从而降低“所有鸡蛋置于同一篮子”的隐患,而且有利于拓展销售渠道,实现销售额和利润的最大化。独立站模式,作为新兴的电商渠道,正逐渐成为众多出海......
  • AP9196 DC-DC 输入3-40V 6A升压恒流电源管理芯 太阳能路灯方案
    产品说明AP9196是一系列外围电路简洁的宽调光比升压调光恒流驱动器,适用于3-40V输入电压范围的LED照明领域。AP9196采用我司专利算法,可以实现高精度的恒流效果,输出电流恒流精度≤±3%,电压工作范围为5-40V,可以轻松满足锂电池及中低压的应用需求,输出耐压仅由MOS耐压决定。芯片内......
  • 如何利用sockserver模块编程实现客户端并发
    前面用sock模块写的服务端和客户端,存在一个大问题,就是当运行多个客户端的时候,必须等一个客户端运行结束,另一个客户端才能实现与服务端的交流,这显然不符合现实中的需求。有没有什么办法解决这个问题呢?有人说没有,屁话。当然有,这就需要用到一个sockserver的模块,用定义类继承类的方式......