您的位置:首页 > 其它

简单实现 linkedList 双向链表

2014-02-28 16:19 423 查看
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();

 
927b
          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);

            }

      }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linkedlist 链表