首页 > 其他分享 >链表插入的小技巧

链表插入的小技巧

时间:2024-06-20 22:10:17浏览次数:13  
标签:head 技巧 list next 链表 插入 new null cur

一个带有优先级的链表:

struct list {
    struct list* next;
    u32 priority;
}

 

如果要按照优先级插入某个新节点node,算法一般会写成:

int list_insert(list **head, list* new)
{
    if (head == null || *head == null || new == null)
        return 1;

    list *prev = null;
    list *cur = *head;
    while (cur != null) {
        if (new->priority > cur->proirity) {
            new->next = cur;
            if (prev != null) // new放在表中
                prev->next = new;
            else // new放在表头
                *head = new;
            return 0;
        }
        prev = cur;
        cur = cur->next;
    }
}

 

如果规定不让使用临时变量呢?思考一下如何实现?

int list_insert(list **head, list* new)
{
    if (head == null || *head == null || new == null)
        return 1;

    while (*head != null) {
        if (new->priority > (*head)->proirity) {
            break;
        }
        head = &((*head)->next);
    }
    new->next = *head;
    *head = new;
}

 为什么这种方法能行?有几个核心原因(以a->b->c为例):

  • p = &(a->next),表示p就是b的地址?*p = new会把b覆盖?错误!p是a->next的地址,不是b的地址,a->next只是数值上和b的地址相同,不是等价的!
  • b和new进行比较时,拿的不是b,而是a->next的地址,这样才可以做到a->next和new->new均可修改

 

标签:head,技巧,list,next,链表,插入,new,null,cur
From: https://www.cnblogs.com/moon-sun-blog/p/18259585

相关文章

  • 4.插入排序
    插入排序插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。排序思路:假设按照升序排序1.从索引为1的元素开始向前比较,一旦前面一个元素大于自己就让前面的元素......
  • 算法题---判断链表中是否有环,并找出环的入口
    方案一、利用Set集合不会重复的原理booleanjudgeCycle(Nodehead){Set<Node>visited=newHashSet<>();Nodenode=head;while(node!=null){if(visited.contains(node))returntrue;visi......
  • RAG优化技巧|7大挑战与解決方式|提高你的LLM能力
    在当今快速发展的人工智能领域,大型语言模型(LLM)已经成为无处不在的技术,它们不仅改变了我们与机器交流的方式,还在各行各业中发挥着革命性的影响。然而,尽管LLM+RAG的能力已经让人惊叹,但我们在使用RAG优化LLM的过程中,还是会遇到许多挑战和困难,包括但不限于检索器返回不准确或......
  • 博客园相关-Markdown设置插入图片对齐方式
    在博客园中,插入图片的默认方式为:![](https://img2024.cnblogs.com/blog/3466488/202406/3466488-20240620171406631-1366059752.png)效果如下:想要设置插入图片的尺寸,可以用<img>元素的style="zoom:20%"属性实现,如下:<imgsrc="https://img2024.cnblogs.com/blog/3466488/202......
  • C#开发-集合使用和技巧(八)集合中的排序Sort、OrderBy、OrderByDescending
    C#开发-集合使用和技巧(八)集合中的排序Sort、OrderBy、OrderByDescendingList<T>.Sort()方法签名使用场景示例升序实现效果降序实现效果IEnumerable<T>.OrderBy()方法签名使用场景示例实现效果Enumerable<T>.OrderByDescending()使用场景示例实现效果总结在C#中,L......
  • 【4月27日RPA公开课UiPath圆满结束】掌握验证码自动登录技巧,实现高效自动化
    在数字化时代,自动化已成为提高工作效率、降低成本的必备工具。而RPA(RoboticProcessAutomation,机器人流程自动化)技术正是其中的佼佼者。为了帮助更多学员掌握RPA技术,RPA学习天地于4月27日举办了一场别开生面的公开课,主题为“如何实现各种验证码的自动登录”。   本次公开......
  • 博客园相关-Markdown设置插入图片尺寸
    应用场景:在博客园的Markdown编辑器中,插入图片的尺寸是默认保持图片原尺寸的,这就导致有些图插入后,在页面中占用篇幅过大。如下图片(原尺寸:1028x1028):默认的Markdown插入代码为:![](https://img2024.cnblogs.com/blog/3466488/202406/3466488-20240620093649135-252360226.png)......
  • MyBatis批量插入不用foreach
    原文链接:MyBatis批量插入不用foreach–每天进步一点点(longkui.site)近日,项目中有一个耗时较长的Job存在CPU占用过高的问题,经排查发现,主要时间消耗在往MyBatis中批量插入数据。mapperconfiguration是用foreach循环做的,差不多是这样。(由于项目保密,以下代码均为自己手写的demo......
  • 高效编程的艺术:IPython最基础技巧指南
    #IPython使用技巧整理:提升你的Python编程效率##引言**IPython**不仅仅是一个交互式Python解释器,它是一个功能强大的工具,能够显著提高你的编程效率和体验。本文将深入探讨IPython的高级使用技巧,帮助你充分利用这一工具的强大功能。##快速入门-**启动IPython**:在命令行......
  • 如何利用AI降重技巧通过AI内容检测?
    近期知网出了新的检测AI生成论文功能,如果论文的AI检测率超过30%,很可能会被判定为AI代写,从而无法参加答辩,影响毕业。所以如果你用AI帮忙写了论文,就一定要在交稿之前做一下AIGC辅写的检测。那么如何有效降低论文的AI检测率呢?我找到几种有效大降低AI浓度的方法,尤其最后一种方法,......