双向链表java实现

  1 package com.liu.Link;
  2 
  3 class DoublyLinkedApp
  4 {
  5 public static void main(String[] args)
  6    {                             
  7    DoubleLink theList = new DoubleLink();
  8 
  9    theList.insertFirst(22);     
 10    theList.insertFirst(44);
 11    theList.insertFirst(66);
 12 
 13    theList.inesrtLast(11);       
 14    theList.inesrtLast(33);
 15    theList.inesrtLast(55);
 16 
 17    theList.displayForward();     
 18    theList.displayBackward();    
 19 
 20    theList.deleteFirst();       
 21    theList.deleteLast();        
 22    theList.deleteKey(11);       
 23 
 24    theList.displayForward();    
 25 
 26    theList.insertAfter(22, 77);  
 27    theList.insertAfter(33, 88);  
 28 
 29    theList.displayForward();     
 30    }  
 31 } 
 32 
 33 
 34 public class DoubleLink {
 35     private Link6 first;
 36     private Link6 last;
 37     public DoubleLink()
 38     {
 39         first = null;
 40         last = null;
 41     }
 42     public boolean isEmpty()
 43     {
 44         return first == null;
 45     }
 46     public void insertFirst(long d)
 47     {
 48         Link6 newLink = new Link6(d);
 49         if(isEmpty())
 50         {
 51             last = newLink;
 52         }else
 53             first.previous = newLink;
 54         newLink.next = first;
 55         first = newLink;
 56     }
 57     public void inesrtLast(long d)
 58     {
 59         Link6 newLink = new Link6(d);
 60         if(isEmpty())
 61             first = newLink;
 62         else
 63         {
 64             last.next = newLink;;
 65             newLink.previous = last;
 66         }
 67         last = newLink;
 68     }
 69     
 70     //插入到某个值的后面
 71     public boolean insertAfter(long key,long d)
 72     {
 73         Link6 current = first;
 74         while(current.dData != key)
 75         {
 76             current = current.next;
 77             if(current == null)
 78             {
 79                 return false;
 80             }
 81             
 82         }
 83         Link6 newLink = new Link6(d);
 84         if(current == last)
 85         {
 86             newLink.next = null;
 87             last = newLink;
 88         }else
 89         {
 90             newLink.next = current.next;
 91             current.next.previous = newLink;
 92         }
 93         newLink.previous = current;
 94         current.next = newLink;
 95         return true;
 96     }
 97     
 98     public Link6 deleteFirst()
 99     {
100         Link6 temp = first;
101         if(first.next == null)//这种情况是只存在一个数据的时候
102             last = null;
103         else
104             first.next.previous = null;
105         first = first.next;
106         return temp;
107     }
108     
109     public Link6 deleteLast()
110     {
111         Link6 temp = last;
112         if(first.next == null)
113             first = null;
114         else
115             last.previous.next = null;
116         last = last.previous;
117         return temp;
118     }
119     
120     public Link6 deleteKey(long key)
121     {
122         Link6 current = first;
123         while(current.dData != key)
124         {
125             current = current.next;
126             if(current == null)
127                 return null;
128         }
129         if(current == first)
130             first = current.next;
131         else
132             current.previous.next = current.next;
133         if(current == last)
134             last = current.previous;
135         else
136             current.next.previous = current.previous;
137         return current;
138     }
139     
140     public void displayForward()
141     {
142         System.out.print("List (first-->last): ");
143         Link6 current = first;
144         while(current != null)
145         {
146             current.displayLink();
147             current = current.next;
148         }
149         System.out.println("");
150     }
151     
152     public void displayBackward()
153     {
154         System.out.print("List (last-->first): ");
155           Link6 current = last;           
156           while(current != null)         
157           {
158              current.displayLink();      
159              current = current.previous; 
160           }
161           System.out.println("");
162           
163     }
164     
165 }
166 
167 class Link6
168 {
169     public long dData;
170     public Link6 next;
171     public Link6 previous;
172     
173     public Link6(long d)
174     {
175         dData = d;
176     }
177     
178     public void displayLink()
179     {
180         System.out.print(dData+" ");
181     }
182 }
原文地址:https://www.cnblogs.com/speaklessdomore/p/3685480.html