练题003

本文介绍了如何使用链表数据结构,结合Java编程实现一个同时支持push、pop、top和获取最小值的栈,最小值操作通过排序链表快速得到。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个题目思路较为明确,可以通过一个链表来实现。

push就是链表添加add

pop就使用链表删除remove(list.size() - 1)

top就使链表查询get(list.size() - 1)

min就将链表进行排序,然后取得最小值

代码如下

class MinStack {

    List<Integer> list;
    // int index = 0;

    public MinStack() {
        list = new ArrayList<>();
        // index = list.size();
    }
    
    public void push(int x) {
        list.add(x);
        // index++;
    }
    
    public void pop() {
        list.remove(list.size() - 1);
        // index--;
    }
    
    public int top() {
        return list.get(list.size() -1 );
    }
    
    public int min() {
        List<Integer> newList = new ArrayList<>();
        newList.addAll(list);
        Collections.sort(newList);
        return newList.get(0);
    }
}

使用Collections集合工具类来实现对集合的排序

链表的复制需使用addAll将一个链表的数据全部加载到另一个链表中(这里由于每次调用min都新创了一个对象所以不用担心数据累积)

链表的访问使用方法get,数组下标访问直接使用[ ](链表是一个封装好的java类,所以所有操作使用方法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值