首页 > 其他分享 >[数据结构] 删除单链表中最小值结点(C语言版本)

[数据结构] 删除单链表中最小值结点(C语言版本)

时间:2024-10-23 20:19:32浏览次数:16  
标签:结点 LNode min next minpre 表中 C语言 previous

如果对单链表基本操作或概念不理解的可以跳转:

单链表的基本操作(C语言版)-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/m0_74181956/article/details/143082621?spm=1001.2014.3001.5501

算法思想:

如图所示:定义指针p 为L的第一个结点,pre为L的头结点,min为记录每次遍历的最小值结点,minpre为记录最小值结点的上一个结点,p和pre 逐次遍历单链表,p与min进行比较,若是p中的节点值小于min中的节点值,那么就让min移动到此时p结点的位置,当遍历完全后,min此时就指向了链表中最小的值结点,此时通过minpre就可以完整min所指结点的释放

void delete_min(LinkList L)
{
    LNode*p=L->next;
    LNode*previous=L;
    LNode*min=p;
    LNode*minpre=previous;
    while(p!=NULL)
    {
        if(p->data<min->data)
        {
            min=p;
            minpre=previous;
        }
        previous=p;
        p=p->next;
    }
        minpre->next=min->next;
        free(min);
}
可运行的完整示例代码:

#include"stdio.h"
#include"stdlib.h"
typedef struct LNode
{
    int data;
    struct LNode*next;
}LNode,*LinkList;

void wei_insert(LinkList L)
{
    int x;
    printf("请输入单链表元素,空格隔开,直到出现“-1”结束:");
    scanf("%d",&x);
    LNode*r=L;
    while(x!=-1)
    {
        LNode*s=(LNode*)malloc(sizeof(LNode));
        s->data=x;
        r->next=s;
        r=s;
        scanf("%d",&x);
    }
    r->next=NULL;
}

void delete_min(LinkList L)
{
    LNode*p=L->next;
    LNode*previous=L;
    LNode*min=p;
    LNode*minpre=previous;
    while(p!=NULL)
    {
        if(p->data<min->data)
        {
            min=p;
            minpre=previous;
        }
        previous=p;
        p=p->next;
    }
        minpre->next=min->next;
        free(min);
}

void print_list(LinkList L)
{
    LNode*p=L->next;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}

void free_list(LinkList L)
{
    LNode*p=L->next;
    while(p!=NULL)
    {
        LNode*q=p;
        p=p->next;
        free(q);
    }
    free(L);
}

int main()
{
    LinkList L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;
    wei_insert(L);
    printf("删除最小节点后的单链表:");
    delete_min(L);
    print_list(L);
    free_list(L);
}

标签:结点,LNode,min,next,minpre,表中,C语言,previous
From: https://blog.csdn.net/m0_74181956/article/details/143191118

相关文章

  • c语言基础程序——经典100道实例。
    c语言基础程序——经典100道实例001,组无重复数字的数002,企业发放的奖金根据利润提成003,完全平方数004,判断当天是这一年的第几天005,三个数由小到大输出006,输出字母C图案007,特殊图案008,9*9乘法表009,国际象棋棋盘010,打印笑脸011,兔子生崽012,101到200的素数013,水仙花数014,分......
  • 关于我、重生到500年前凭借C语言改变世界科技vlog.8——函数递归
    文章目录1.递归的介绍2.递归的限制条件3.递归实战应用3.1求n的阶乘3.2顺序打印一个整数的每一位4.递归与迭代5.递归经典问题的拓展希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力!1.递归的介绍在vlog.2的printf函数的返回值举例中,我们使......