今天看了Robert Lafore的《java数据结构和算法》(第二版)才知道昨天学习的单向链表,是双端链表,就是在链表中有两引用分别指向第一个链结点和最后一个链结点,传统的单向链接就是所谓的单端链表(姑且这么叫吧)。另外,以前一直想不明白first到底是啥意思(想要那种非常直观的意思),现在明白了它是对第一个链结点的引用,也可以这么理解链表本身的对象中有一个字段指向对第一个链结点的引用。
下面代码是简单的单向单端链表的例子:
class Link
{
public int iData;
public double dData;
public Link next;
//-------------------------------------
public Link(int iData,double dData)
{
this.iData = iData;
this.dData = dData;
}
//-------------------------------------
public void displayLink()
{
System.out.print("{" + iData + ", " + dData + "}");
}
}
class LinkList
{
private Link first;
public LinkList()
{
first = null;
}
public boolean isEmpty()
{
return (first == null);
}
public void insertFirst(int id, double dd)
{
Link newLink = new Link(id, dd);
newLink.next = first;
first = newLink;
}
public Link deleteFirst()
{
Link temp = first;
first = first.next;
return temp;
}
public void displayList()
{
System.out.println("List(first-->last): ");
Link current = first;
while(current != null)
{
current.displayLink();
current = current.next;
}
System.out.println("");
}
}
public class LinkListApp
{
public static void main(String[] args)
{
LinkList theList = new LinkList(); //nake new list
theList.insertFirst(12,23.66); //insert four items, insert from front everytime!
theList.insertFirst(174,2454.66);
theList.insertFirst(154,25554.66);
theList.insertFirst(189,256.66);
theList.displayList(); //diplay what you have inserted!
while(!theList.isEmpty()) //delete util it is empty
{
Link aLink = theList.deleteFirst();
System.out.print("Deleted: ");
aLink.displayLink();
System.out.println("");
}
theList.displayList();
}
}
运行过程:插入四个items,注意每次都是从头插入,所以输出时是“倒序”输出的,最后又逐一删掉item,不删完不罢休!
运行结果: