删除单链表中的最小值结点

思路:类似顺序表中的最小值查找算法,在遍历单链表的过程中,用一个指针标记最小值结点的前驱结点。遍历完成后通过前驱结点将最小值结点删除。

#include <iostream>

using namespace std;

// 链表节点
typedef struct LNode{
    int data;
    LNode *next;
}*LinkList;

// 尾插法
void List_TailInsert(LinkList &L)
{
    // 初始化头结点
    L = new LNode();

    int x;
    LinkList s; // 用于临时节点
    LinkList r = L; // 指向链尾
    scanf("%d", &x);
    while(x!=999) {
        s = new LNode();
        s->data = x;
        // 将s节点插入
        r->next = s;
        r = s;
        scanf("%d", &x);
    }
    r->next = NULL;
}

// 打印链表
void List_Print(LinkList L)
{
    L = L->next;
    while(L!=NULL) {
        cout << L->data << ' ';
        L = L->next;
    }
    cout << endl;
}

// 删除最小值节点
void List_DeleteMin(LinkList L)
{
    // 若链表为空,不执行任何操作
    if (L->next == NULL)    return;
    // Pmin指向最小值的先驱节点
    LinkList Pmin = L, s = L->next;
    while(s->next != NULL) {
        if (s->next->data < Pmin->next->data)
            Pmin = s;
        s = s->next;
    }
    // 将Pmin的后继删除
    s = Pmin->next;
    Pmin->next = s->next;
    free(s);
}




int main()
{
    LinkList L;
    List_TailInsert(L);
    List_DeleteMin(L);
    List_Print(L);
    return 0;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值