JAVA如何使用鏈表__JAVA

來源:互聯網
上載者:User

//定義一個鏈表類,與其它類一樣,包括成員變數和成員函數等。
//成員變數可以是對象的引用,成員函數包括通過建構函式對變數賦值,也包括通過一般的方法為成員函數賦值或者是返回變數值。
public class SingleListElem
{
//fields
protected Object data; //變數定義為Object類型,說明data可以是對象的引用。可以給它賦值為一個對象。
protected SingleListElem nextElem; //指向下一個鏈表元素,注意其資料類型就是本類名。

//constructor 建構函式,給變數賦初值。
public SingleListElem(Object data, SingleListElem next)
{
this.data = data;
this.nextElem = next;
}
//建構函式重載,如果對象無下一鏈表,則將nextElem值空。
public SingleListElem(Object data)
{
SingleListElem(data, null);
}
//non-static method
//通過一個函數為成員變數nextElem賦值,也就是賦下一個連結元素的引用。
public void setNext(SingleListElem next)
{
nextElem = next;
}

//通過函數返回成員變數值,在這裡也就是返回對象的引用。
public Object value()
{
return data;
}

//通過函數為對象的引用賦值。
public void setValue(Object value)
{
data = value;
}
}

//定義一個類,用於對鏈表進行操作,比如增加一個頭元素、增加一個尾元素、刪除一個尾元素等
public class SingleList
{
//field
protected long count; //用以記錄鏈表元素的序列
protected SingleListElem head;//定義一個鏈表的頭元素,引用鏈表的時候只需要從頭元素開始,將頭元素作為參數傳給引用的函數。

//constructor建構函式,先賦初值。
public SingleList()
{
head = null;
count = 0;
}

//return size
public long size()
{
return count;
}
//上下為什麼寫兩個函數,直接寫count==0不好嗎。
public boolean isEmpty()
{
return size()==0;
}
 
//add element to head 產生第一個鏈表元素,增加頭元素
public void addToHead(Object value)
{
//用的是第一種構造方法,其實可以用第二種構造方法的,將第一個鏈表對象的引用值賦給head
head = new SingleListElem(value, head);
count++;
}

//remove element from head 移走頭元素
public Object removeFromHead()
{
SingleListElem tmp = head;
head = head.next();
count--;
return tmp;
}
//add element to tail 鏈表尾增加一個元素
public void addToTail(Object value)
{
SingleListElem tmp = new SingleListElem(value,null);
if(head!=null) //如果第一個元素存在
 {
 SingleListElem pointor = head; //從第一個元素開始迴圈
  while(pointor.next()!=null)   //只要鏈表中有元素存在,則向下找,直到最後一個元素的下一個引用被得到
  {
  pointor = pointor.next();
  }
 pointor.setNext(tmp);//將新對象賦值給引用變數
 }
else   
 {head = tmp;}
count++;
}
//remove from tail刪除尾元素
public Object removeFromTail()
{
SingleListElem pointor = head;//注意,都是從頭開始找起的
SingleListElem pre = null;
while(pointor.next()!=null) {
pre = pointor;
pointor = pointor.next();
}
if(pre == null) head = null;
else pre.setNext(null);
count--;
return pointor.value;
}

public clear()
{
head = null;
count = 0;
}
//and other method such as contains, remove, toString...
//I think it is easy for you ,hehe
}
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.