鏈表是一種重要的數據結構
class Node
{
Object data;
Node next; // 指向下一個結點
}
將數據域定義成Object類是因為Object類是廣義超類(所有類的祖先)
圖一 鏈表的數據結構
我們可以用類List來實現鏈表結構
鏈表類List的源代碼如下
import java
public class List
{
/* 用變量來實現表頭 */
private Node Head=null;
private Node Tail=null;
private Node Pointer=null;
private int Length =
public void deleteAll()
/* 清空整個鏈表 */
{
Head = null;
Tail = null;
Pointer = null;
Length =
}
public void reset()
/* 鏈表復位
{
Pointer = null;
}
public boolean isEmpty( )
/* 判斷鏈表是否為空 */
{
return( Length ==
}
public boolean isEnd()
/* 判斷當前結點是否為最後一個結點 */
{
if ( Length ==
throw new java
else if ( Length ==
return true;
else
return( cursor() == Tail );
}
public Object nextNode()
/* 返回當前結點的下一個結點的值
{
if ( Length ==
throw new java
else if ( Length ==
throw new java
else
{
Node temp = cursor();
Pointer = temp;
if ( temp != Tail )
return( temp
else
throw new java
}
}
public Object currentNode()
/* 返回當前結點的值 */
{
Node temp = cursor();
return temp
}
public void insert( Object d )
/* 在當前結點前插入一個結點
{
Node e = new Node( d );
if ( Length ==
{
Tail = e;
Head = e;
}
else
{
Node temp = cursor();
e
if ( Pointer == null )
Head = e;
else
Pointer
}
Length++;
}
public int size()
/* 返回鏈表的大小 */
{
return ( Length );
}
public Object remove()
/* 將當前結點移出鏈表
的結點是最後一個結點
{
Object temp ;
if ( Length ==
throw new java
else if ( Length ==
{
temp = Head
deleteAll();
}
else
{
Node cur = cursor();
temp = cur
if ( cur == Head )
Head = cur
else if ( cur == Tail )
{
Pointer
Tail = Pointer;
reset();
}
else
Pointer
Length
}
return temp;
}
private Node cursor()
/* 返回當前結點的指針 */
{
if ( Head == null )
throw new java
else if ( Pointer == null )
return Head;
else
return Pointer
}
public static void main( String[] args )
/* 鏈表的簡單應用舉例 */
{
List a = new List();
for ( int i =
a.insert( new Integer( i ) );
System.out.println( a.currentNode() );
while ( !a.isEnd() )
System.out.println( a.nextNode() );
a.reset();
while ( !a.isEnd() )
{
a.remove();
}
a.remove();
a.reset();
if ( a.isEmpty() )
System.out.println("There is no Node in List \n");
System.in.println( " You can press return to quit\n" );
try
{
System.in.read(); // 確保用戶看清程序運行結果
}
catch( IOException e )
{}
}
}
class Node
/* 構成鏈表的結點定義 */
{
Object data;
Node next;
Node( Object d )
{
data = d;
next = null;
}
}
讀者還可以根據實際需要定義新的方法來對鏈表進行操作。tw.wiNgwIT.cOm雙向鏈表可以用類似的方法實現只是結點的類增加了一個指向前趨結點的指針。
我們可以用這樣的代碼來實現:
class Node
{
Object data;
Node next;
Node previous;
Node ( Object d )
{
data = d;
next = null;
previous = null;
}
}
當然雙向鏈表基本操作的實現略有不同,這裡就不再詳述了。鏈表和雙向鏈表的實現方法,也可以用在堆棧和隊列的實現中,這裡就不再多寫了,有興趣的讀者可以將List類的代碼稍加改動即可。
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25266.html