CS61B - List #2 双向链表

构建一个双向链表

DLList

我们现在需要一个双向链表,如何实现呢?

从SLList来说,我们创建了一个哨兵节点,那最直观的想法是:在尾部也创建一个节点。

但是存在另一种可能性:直接让这个哨兵节点的prev指向尾部,形成了一个环的结构,从而方便的构建一个双向链表

class DLList<T>{
    //Node
    class Node{
        public T? item;
        public Node? next;
        public Node? prev;
        public Node(T? value, Node? next,Node? prev)
        {
            this.item = value;
            this.next = next;
            this.prev = prev;
        }
    }

    //DLList    

    private Node sentinel;
    public int size = 0;

    public DLList(){
        sentinel = new Node(default,sentinel,sentinel);
    }

    public DLList(T item){
        sentinel = new Node(default,null,null);
        sentinel.next = new Node(item,null,null);
        sentinel.prev = sentinel.next;
        size += 1;
    }

    public void AddFirst(T item){
        sentinel.next = new Node(item,sentinel.next,sentinel);
        size += 1;
    }

    public void AddLast(T item){
        sentinel.prev = new Node(item,sentinel.prev,sentinel);
        size += 1;
    }

    public void RemoveLast(){
        sentinel.prev.prev.next = sentinel;
        sentinel.prev = sentinel.prev.prev;
    }

    public int GetSize(){
        return size;
    }

    //public T  GetItem(int index)
    //{
    //不想写了
    //}
}

评论