📄 llist.java
字号:
package antlr.collections.impl;/* ANTLR Translator Generator * Project led by Terence Parr at http://www.jGuru.com * Software rights: http://www.antlr.org/RIGHTS.html * * $Id: //depot/code/org.antlr/release/antlr-2.7.0/antlr/collections/impl/LList.java#1 $ */import antlr.collections.List;import antlr.collections.Stack;import java.util.Enumeration;import java.util.NoSuchElementException;import antlr.collections.impl.LLCell;/**A Linked List Implementation (not thread-safe for simplicity) * (adds to the tail) (has an enumeration) */public class LList implements List, Stack { protected LLCell head=null, tail=null; protected int length=0; /** Add an object to the end of the list. * @param o the object to add */ public void add(Object o) { append(o); } /** Append an object to the end of the list. * @param o the object to append */ public void append(Object o) { LLCell n = new LLCell(o); if ( length==0 ) { head=tail=n; length=1; } else { tail.next = n; tail=n; length++; } } /**Delete the object at the head of the list. * @return the object found at the head of the list. * @exception NoSuchElementException if the list is empty. */ protected Object deleteHead() throws NoSuchElementException { if ( head==null ) throw new NoSuchElementException(); Object o = head.data; head = head.next; length--; return o; } /**Get the ith element in the list. * @param i the index (from 0) of the requested element. * @return the object at index i * NoSuchElementException is thrown if i out of range */ public Object elementAt(int i) throws NoSuchElementException { int j=0; for (LLCell p = head; p!=null; p=p.next) { if ( i==j ) return p.data; j++; } throw new NoSuchElementException(); } /**Return an enumeration of the list elements */ public Enumeration elements() { return new LLEnumeration(this); } /** How high is the stack? */ public int height() { return length; } /** Answers whether or not an object is contained in the list * @param o the object to test for inclusion. * @return true if object is contained else false. */ public boolean includes(Object o) { for (LLCell p = head; p!=null; p=p.next) { if ( p.data.equals(o) ) return true; } return false; } // The next two methods make LLQueues and LLStacks easier. /** Insert an object at the head of the list. * @param o the object to add */ protected void insertHead(Object o) { LLCell c = head; head = new LLCell(o); head.next = c; length++; if ( tail==null ) tail = head; } /**Return the length of the list.*/ public int length() { return length; } /** Pop the top element of the stack off. * @return the top of stack that was popped off. * @exception NoSuchElementException if the stack is empty. */ public Object pop() throws NoSuchElementException { Object o = deleteHead(); return o; } // Satisfy the Stack interface now. /** Push an object onto the stack. * @param o the object to push */ public void push(Object o) { insertHead(o); } public Object top() throws NoSuchElementException { if ( head==null ) throw new NoSuchElementException(); return head.data; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -