带虚拟头结点的单链表

    科技2026-02-28  9

    带虚拟头结点的单链表

    public class DummyLinkedList<E>{ private int size; private Node<E> first; private static int ELEMENT_NOT_FOUND=-1; private static class Node<E>{ Object element; Node<E> next; public Node(E element, Node<E> next) { super(); this.element = element; this.next = next; } } public DummyLinkedList() { first=new Node<E>(null, null); } public void clear() { size=0; first=null; } public int size() { return size; } public int indexOf(E element){ if(element==null){ for(int i=0;i<size;i++){ if(node(i).element==null){ return i; } } }else{ for(int i=0;i<size;i++){ if(node(i).element.equals(element)){ return i; } } } return ELEMENT_NOT_FOUND; } @Override public String toString() { StringBuilder sb=new StringBuilder(); Node<E> node=first.next; sb.append("["); for(int i=0;i<size;i++){ sb.append(node(i).element); if(i!=size-1){ sb.append(","); } } sb.append("]"); return sb.toString(); } public boolean isEmpty() { return size==0; } public boolean contains(Object element) { for(int i=0;i<size;i++){ if(element==null){ if(node(i).element==null){ return true; } }else{ if(node(i).element.equals(element)){ return true; } } } return false; } public void add(Object element) { add(size,element); } public Object get(int index) { return node(index).element; } public Object set(int index, Object element) { Node<E> temp=node(index); E e=(E) temp.element; temp.element=element; return e; } public void add(int index, Object element) { rangeCheckForAdd(index); Node<E> prev=index==0?first:node(index-1); Node<E> temp=new Node(element,prev.next); prev.next=temp; size++; } public E remove(int index) { Node<E> temp=null; Node<E> prev=index==0?first:node(index-1); temp=prev.next; prev.next=prev.next.next; size--; return (E) temp.element; } private Node node(int index){ rangeCheck(index); Node temp=first.next; for(int i=0;i<index;i++){ temp=temp.next; } return temp; } private void outBounds(int index){ throw new IndexOutOfBoundsException("Index:"+index+",Size: "+size); } private void rangeCheck(int index){ if(index<0||index>=size){ outBounds(index); } } private void rangeCheckForAdd(int index){ if(index<0||index>size){ outBounds(index); } } }
    Processed: 0.013, SQL: 9