Sentinel Node
紫色区域是何值并不关心
哨兵节点相当于一个哑单元,或者一个傀儡,作用是防止首节点为空时(first == null),出现无法指向下个节点情况。哨兵节点指向的下个单元为首节点。

public class SLList {
    public class IntNode {
        public int item;
        public IntNode next;
        public IntNode(int i, IntNode n) {
            item = i;
            next = n;
        }
    }

    private IntNode first; 
    private int size;

    public SLList() {
        first = null;
        size = 0;
    }

    public SLList(int x) {
        first = new IntNode(x, null);
        size = 1;
    }

    /** Adds an item to the front of the list. */
    public void addFirst(int x) {
        first = new IntNode(x, first);
        size += 1;
    }    

    /** Retrieves the front item from the list. */
    public int getFirst() {
        return first.item;
    }

    /** Returns the number of items in the list. */
    public int size() {
        return size;
    }

    /** Adds an item to the end of the list. */
    /* 这里已经通过讨论首节点为空的情况修正,但采用哨兵节点会更简洁*/
    public void addLast(int x) {
       size += 1;
        if(first == null){
            first = new IntNode(x , first);
            return 0;
        IntNode p = first;
        while(p != null){
            p = p.next;         
        }
        p.next = IntNode(x , null);
    }

    /** Crashes when you call addLast on an empty SLList. Fix it. */
    public static void main(String[] args) {
        SLList x = new SLList();
        x.addLast(5);
    }
}

添加节点的方法:

    public void addLast(int x) {
       size += 1;
        if(first == null){
            first = new IntNode(x , first);
            return 0;
        IntNode p = first;
        while(p != null){
            p = p.next;         
        }
        p.next = IntNode(x , null);
    }

利用哨兵节点进行优化:

    public void addLast(int x) {
    	size += 1;
        IntNode p = sentinel;
        while(p != null){
            p = p.next;         
        }
        p.next = IntNode(x , null);
    }

本文为CS61B学习笔记,参考链接:https://joshhug.gitbooks.io/hug61b/content/chap2/chap22.html

GitHub 加速计划 / sentine / Sentinel
49
7
下载
alibaba/Sentinel: Sentinel 是阿里巴巴开源的一款面向分布式服务架构的流量控制、熔断降级组件,提供实时监控、限流、降级和系统保护功能,适用于微服务治理场景。
最近提交(Master分支:4 个月前 )
222670e6 * fix: Endpoint#toString host formatting; add Endpoint unit test * test: remove empty EndpointTest.java (fix accidental PR changes) --------- Signed-off-by: 赖尧 <yujitang_2006@qq.com> 25 天前
e7a9c560 * chore: remove node_modules from git & add to .gitignore * fix(docs): normalize README table style (MD060) across adapters and cluster modules * docs: fix compact table style in parameter flow README * docs: fix markdownlint MD009 and MD060 in README files * docs: fix table format in parameter-flow-control README (MD060/MD009) * docs: fix table format in spring-webmvc README files (MD060/MD009) * fix: restore UTF-8 encoding and fix markdownlint errors * fix: wrap remaining bare URLs with angle brackets (MD034) * fix: remove trailing spaces from table rows (MD009) --------- Signed-off-by: 赖尧 <yujitang_2006@qq.com> 30 天前
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐