FreeRTOS源码解析(双向链表)

2.1什么是双向链表

双向链表(Doubly Linked List) 是一种特殊的链表结构。每个节点除了存放数据外,还包含两个指针:

  • prev → 指向前一个节点
  • next → 指向后一个节点

因此,双向链表既可以 从前往后遍历,也可以 从后往前遍历

HeadNode
   ↓
┌───────────┐     ┌───────────┐     ┌───────────┐     ┌──────┐
│ data:  0  │ ⇄   │ data: 10  │ ⇄   │ data: 20  │ ⇄   │ NULL │
│ prev: -   │     │ prev: *   │     │ prev: *   │     └──────┘
│ next: *   │     │ next: *   │     │ next: *   │
└───────────┘     └───────────┘     └───────────┘

双向链表的节点需要保存:

  • 数据域:存放数据
  • 前驱指针:指向前一个节点
  • 后继指针:指向下一个节点

双向链表结构:

typedef struct dnode
{
    int data;                // 节点存放的数据
    struct dnode* prev;      // 指向前一个节点
    struct dnode* next;      // 指向后一个节点
} DNode;

2.2双向链表的添加

1.创建新节点

  • 申请内存 malloc,填充数据域 data
  • 新节点的 next 初始化为 NULL(因为它将成为新的尾节点)。

2.找到当前尾节点

  • 从头结点开始,沿着 next 指针一直遍历,直到找到 next == NULL 的节点,这个就是当前尾节点。

3.修改指针完成插入

  • 让当前尾节点的 next 指向新节点。
  • 让新节点的 prev 指向当前尾节点。

4.结束

  • 新节点已经挂在链表尾部,链表结构完整。
  • 如果有返回值,通常返回 0 表示成功,-1 表示失败(如内存分配失败)。
HeadNode
   ↓
┌───────────┐     ┌───────────┐     ┌───────────┐     ┌───────────┐     ┌──────┐
│ data: 0   │ ⇄   │ data: 10  │ ⇄   │ data: 20  │ ⇄   │ data: 30  │ ⇄   │ NULL │
│ prev: -   │     │ prev: *   │     │ prev: *   │     │ prev: *   │
│ next: *   │     │ next: *   │     │ next: *   │     │ next: NULL│
└───────────┘     └───────────┘     └───────────┘     └───────────┘

代码:

int Add(DNode* ListHead, int data)
{
    // 1. 申请新节点
    DNode* PNode = (DNode*)malloc(sizeof(DNode));
    if (PNode == NULL)
    {
        return -1; // 内存申请失败
    }
    PNode->data = data;
    PNode->next = NULL;

    // 2. 找到链表尾
    DNode* PTemp

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

嵌入式面试八股文全集 文章被收录于专栏

这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

全部评论

相关推荐

老粉都知道小猪猪我很久没更新了,因为秋招非常非常不顺利,emo了三个月了,接下来说一下我的情况吧本人是双非本 专业是完全不着计算机边的非科班,比较有优势的是有两段大厂实习,美团和字节。秋招面了50+场泡池子泡死的:滴滴 快手 去哪儿 小鹏汽车 不知名的一两个小厂其中字节13场 两次3面挂 两次2面挂 一次一面挂其中有2场面试题没写出来,其他的都是全a,但该挂还是挂,第三次三面才面进去字节,秋招加暑期总共面了22次字节,在字节的面评可以出成书了快手面了8场,2次实习的,通过了但没去,一次2面挂 最后一次到录用评估 至今无消息滴滴三面完 没几天挂了 所有技术面找不出2个问题是我回答不上来的,三面还来说我去过字节,应该不会考虑滴滴吧,直接给我干傻了去哪儿一天速通 至今无消息小鹏汽车hr 至今无消息美团2面挂 然后不捞我了,三个志愿全部结束,估计被卡学历了虾皮二面挂 这个是我菜,面试官太牛逼了拼多多二面挂 3道题也全写了 也没问题是回答不出来的 泡一周后挂腾讯面了5次 一次2面挂 三次一面挂,我宣布腾讯是世界上最难进的互联网公司然后还有一些零零散散的中小厂,但是数量比较少,约面大多数都是大厂。整体的战况非常惨烈,面试机会少,就算面过了也需要和各路神仙横向对比,很多次我都是那个被比下去的人,不过这也正常,毕竟谁会放着一个985的硕士不招,反而去招一个双非读化学的小子感觉现在互联网对学历的要求越来越高了,不仅仅要985还要硕士了,双非几乎没啥生存空间了,我感觉未来几年双非想要进大厂开发的难度应该直线上升了,唯一的打法还是从大二刷实习,然后苟个转正,不然要是去秋招大概率是炮灰。而且就我面字节这么多次,已经开始问很多ai的东西了,你一破本科生要是没实习没科研懂什么ai啊,纯纯白给了
不知名牛友_:爸爸
秋招你被哪家公司挂了?
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
2025-12-17 16:48
今天九点半到公司,我跟往常一样先扫了眼电脑,屁活儿没有。寻思着没事干,就去蹲了个厕所,回来摸出手机刷了会儿。结果老板刚好路过,拍了我一下说上班别玩手机,我吓得赶紧揣兜里。也就过了四十分钟吧,我的直属领导把我叫到小隔间,上来就给我一句:“你玩手机这事儿把老板惹毛了,说白了,你可以重新找工作了,等下 HR 会来跟你谈。” 我当时脑子直接宕机,一句话都没憋出来。后面 HR 找我谈话,直属领导也在旁边。HR 说我这毛病不是一次两次了,属于屡教不改,不光上班玩手机,还用公司电脑看论文、弄学校的事儿。我当时人都傻了,上班摸鱼是不对,可我都是闲得发慌的时候才摸啊!而且玩手机这事儿,从来没人跟我说过后果这么严重,更没人告诉我在公司学个习也算犯错!连一次口头提醒都没有,哪儿来的屡教不改啊?更让我膈应的是,昨天部门刚开了会,说四个实习生里留一个转正,让大家好好表现。结果今天我就因为玩手机被开了。但搞笑的是,开会前直属领导就把我叫去小会议室,明明白白告诉我:“转正这事儿你就别想了,你的学历达不到我们部门要求,当初招你进来也没打算给你这个机会。”合着我没入贵厂的眼是吧?可我都已经被排除在转正名单外了,摸个鱼至于直接把我开了吗?真的太离谱了!
rush$0522:转正名单没进,大概率本来就没打算留你
摸鱼被leader发现了...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务