带有“哨兵”的链表:v2

/* 带有哨兵的链表。哨兵所在的位置是真正列表开始前的一位。记住这一点,即可轻松理解哨兵含义,并编写addFirst和addLast方法。*/
// first是否为空影响某些情况的判断,既然这样,找一个哨兵,指向first。就可解决这一问题。这个思路很好。

public class SLList_1{
    public static class IntNode{
        public int item;
        public IntNode next;

        public IntNode(int i, IntNode n){
            item = i;
            next = n;
        }
    }
    public IntNode sentry;
    public int size;

    public SLList_1(){
        sentry = new IntNode(1, null);
        size = 0;
    }
    public SLList_1(int x){
        sentry = new IntNode(1, null);
        sentry.next = new IntNode(x, null);
        size = 1;
    }
    public void addFirst(int x){
        sentry.next = new IntNode(x, sentry.next);
        size += 1;
    }
    public void addLast(int x){
        // 不论此时真正的链表是否为空,都不影响。
        IntNode p = sentry;
        if(p.next != null){
            p = p.next;
        }
        p.next = new IntNode(x, null);
        size += 1;
    }

    public int getSize() {
        return size;
    }

    public static void main(String[] args) {
        SLList_1 L = new SLList_1();
        L.addFirst(5);
        L.addLast(10);
        System.out.print(L.getSize());
    }
}
posted @   啤酒加点醋  阅读(76)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示