简单实现 linkedList 双向链表

来源:互联网 发布:淘宝开店认证需要什么 编辑:程序博客网 时间:2024/05/16 04:45
package com.collection;


import java.util.LinkedList;




class Entry
{
      public Object obj;
      public Entry next;
      public Entry previous;


      public Entry ( Object obj, Entry next, Entry prvious )
      {
            this.obj = obj;
            this.next = next;
            this.previous = prvious;
      }


}


public class MyLinkedList
{


      private Entry header = new Entry(null, null, null);
      private int size;


      public MyLinkedList ()
      {
            header.next = header.previous = header;
      }


      public int size ()
      {
            return size;
      }


      public Entry remove ( int index )
      {


            Entry entry = get(index);
            if ( entry == header )
                  throw new RuntimeException("头结点不能删除");


            entry.next.previous = entry.previous;
            entry.previous.next = entry.next;
            size--;
            return entry;
      }


      public Entry remove ( Object obj )
      {


            Entry entry = header;
            for ( int i = 0; i < size; i++ )
            {
                  entry = entry.next;
                  if ( entry.obj.equals(obj) )
                  {
                        return remove(i);
                  }
            }
            return null;
      }


      public void add ( Object obj, Entry entry )
      {
            Entry newEntry = new Entry(obj, entry, entry.previous);
            newEntry.next.previous = newEntry;
            newEntry.previous.next = newEntry;
            size++;
      }


      public void add ( Object obj )
      {
            add(obj, header);
      }


      public void add ( Object obj, int index )
      {
            add(obj, index == size ? header : get(index));
      }


      public Entry get ( int index )
      {
            if ( index < 0 || index >= size )
            {
                  throw new RuntimeException("下标越界");
            }


            Entry entry = header;
            if ( index > size >> 1 )
            {
                  for ( int i = 0; i < size - index; i++ )
                  {
                        entry = entry.previous;
                  }
            }
            else
            {
                  entry = entry.next;
                  for ( int i = 0; i < index; i++ )
                  {
                        entry = entry.next;
                  }
            }
            return entry;
      }


      public static void main ( String [] args )
      {
            MyLinkedList link = new MyLinkedList();
            link.add("22222");
            link.add("33333");
            link.add("44444");
            link.add("55555");
            link.add("66666", 1);
            for ( int i = 0; i < link.size(); i++ )
            {
                  System.out.println( ( (Entry) link.get(i) ).obj);
            }
            System.out.println("....................");
          //  link.remove(1);
            link.remove("33333") ;
            for ( int i = 0; i < link.size(); i++ )
            {
                  System.out.println( ( (Entry) link.get(i) ).obj);
            }
      }
}
0 0
原创粉丝点击