首页 > 编程语言 >《渣男代码历险记》第五章:设计一个算法删除单链表L(有头结点)中的一个最小值结点

《渣男代码历险记》第五章:设计一个算法删除单链表L(有头结点)中的一个最小值结点

时间:2024-04-22 20:48:09浏览次数:13  
标签:pre 结点 cur 历险记 min 有头 最小值 val

为了删除单链表L中的一个最小值结点,我们可以遍历链表,找到最小值结点及其前驱结点,然后修改前驱结点的指针,使其指向最小值结点的下一个结点。以下是算法的解析和代码实现:

  1. 初始化两个指针pre和cur,分别指向头结点和头结点的下一个结点。
  2. 初始化一个变量min_val,用于存储当前最小值,将其设置为cur结点的值。
  3. 初始化一个变量min_pre,用于存储最小值结点的前驱结点,将其设置为头结点。
  4. 遍历链表,比较cur结点的值与min_val的大小,如果cur结点的值更小,则更新min_val和min_pre。
  5. 更新pre和cur指针,使它们分别指向下一个结点。
  6. 当cur为空时,结束遍历。
  7. 修改min_pre指针,使其指向min_pre的下一个结点的下一个结点,从而删除最小值结点。
#include <stdio.h>
#include <stdlib.h>

typedef struct ListNode {
    int val;
    struct ListNode *next;
} ListNode;

void delete_min_node(ListNode *head) {
    if (!head || !head->next) {
        return;
    }

    ListNode *pre = head;
    ListNode *cur = head->next;
    int min_val = cur->val;
    ListNode *min_pre = head;

    while (cur) {
        if (cur->val < min_val) {
            min_val = cur->val;
            min_pre = pre;
        }
        pre = cur;
        cur = cur->next;
    }

    min_pre->next = min_pre->next->next;
}

注意:这个算法假设链表中至少有一个结点。

标签:pre,结点,cur,历险记,min,有头,最小值,val
From: https://www.cnblogs.com/jjjkkklll/p/18151481

相关文章

  • 对链表中最小数据项对应的结点删除
    //指的是顺序表中的元素的数据类型,用户可以根据需要进行修改typedefintDataType_t;//构造链表SeqList—_t的结点,结点中包含数据域和指针域,并且所有结点中的数据应该相同typedefstructSeqList{DataType_tData;structSeqList*next;}LinkList_t;//创建......
  • 设计一个算法删除单链表L(有头结点)中的一个最小值结点。
    思路1:定义一个变量=遍历每一个当前地址下面的数据和下一个作比较,谁小把谁的值给这个变量,同时记录这个小值的位置i,依次遍历比较,得到最小值和最小值的结点i的值,然后删除这个结点。思路2:给两个指针,p1,p2开始都指向第一个,然后p2指向下一个地址,和p1下的data作比较,得到的小值的p不动......
  • 《渣男代码历险记》第四 双指针怪
    已知一个带有表头结点的单链表,结点结构为:data next假设该链表只给出了头指针head。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k(k为正整数)个位置上的结点。若查找成功,算法输出该结点的data值,并返回1;否则,只返回0。要求:(1)描述算法的基本设......
  • 《渣男代码历险记》第三章:天谴之子——光明与黑暗的对决
    “醒醒!醒醒!”“我这是在哪?”二。“你昏睡了34天了。”舅舅。“发生了什么?”舅舅哽咽了,半天说不出话来。“你。。。。。。是天谴之子。”“你为什么这样说?”“你只有放弃人类的未来,才能获得自身的幸福。现在全人类都被代码灭亡了。你答对一个计算机题目,就可以救若干个人类。......
  • 《渣男代码历险记》第一章:经济崛起的塔塔开
    “可恶!是邪恶的代码怪兽!”“YIMA,WATASHINOTATAKAINOCHIKALAWA2314DESU!"1.写出程序执行结果include<stdio.h>voidmain(){chars1[]="HelloWorld!";chars2[]="HelloWorld!";if(s1==s2)printf(“Equal!”);else printf(“Notequal!”);}......
  • 树2-二叉树拷贝, 遍历, 计算叶子结点和高度
    树2-二叉树拷贝,遍历,计算叶子结点和高度二叉树结点typedefstructBinaryNode{charch;structBinaryNode*lChild;structBinaryNode*rChild;}BinaryNode;//叶子结点的数量intsum;二叉树遍历前序//递归遍历(前序)voidRecursion(BinaryNode*roo......
  • 链表中环的入口结点
       1.先用快慢指针判断是否存在环2.返回快慢指针相遇的地方,一个指针停留在那里。3.另一个指针回到头节点4.两个节点一起走,每次走一格,再次相遇的地方就是入口节点publicclassSolution{    //判断有没有环,返回相遇的地方    publicListNodehasCycle(ListN......
  • 解决hadoop的namenode和datanode结点启动不起来的问题
    首先介绍一下本人的情况:我的虚拟机最开始是可以启动的,后来删除了主节点,重新创建了一个主节点,并保持相同的主机名,并把从结点上的hadoop打包发到了主节点(前提已经弄好ssh和相关映射)tar-zcf~/hadoop.master.tar.gz./hadoop//将hadoop目录下的内容打包复制到~/hadoop.master.ta......
  • Ubuntu 18.04无线网卡安装历险记(转)
    问题描述对该问题的解决,耗时数天,曲曲折折。真的可以用“山重水复疑无路”,最后到达了“柳暗花明又一村”。问题环境:Ubuntu18.04,无线网卡为迅捷(Fast)FW150UH(免驱版)。通过系统的网络Wifi设置找不到Adaptor。先是在网上《Ubuntu18.04安装博通(Broadcom)无线网卡驱动》看了相关操......
  • 定义一棵松弛红黑树及其根结点颜色转换后的影响
    定义一棵松弛红黑树及其根结点颜色转换后的影响1.红黑树的性质2.松弛红黑树的定义3.根节点颜色变化的影响4.伪代码实现5.C语言代码实现6.结论在计算机科学中,红黑树是一种自平衡的二叉搜索树,它在许多数据结构和算法问题中都有着广泛的应用。红黑树通过一系列精心......