遍歷初始時(shí),讓游標(biāo) cur 指向索引為 0 的節(jié)點(diǎn)陵吸;當(dāng) i = 0 時(shí)玻墅,cur 指向索引為 1 的節(jié)點(diǎn);當(dāng) i == index - 1 時(shí)(循環(huán)停止的位置)走越,cur 指向索引為 index 的節(jié)點(diǎn)椭豫,即要?jiǎng)h除節(jié)點(diǎn)的位置(在做這一步分析的時(shí)候,很像枚舉數(shù)列的前幾個(gè)數(shù)旨指,然后找規(guī)律的感覺(jué))赏酥;
// 獲得鏈表的第index(0-based)個(gè)位置的元素
// 在鏈表中不是一個(gè)常用的操作,練習(xí)用:)
public E get(int index){
if(index < 0 || index >= size)
throw new IllegalArgumentException("Get failed. Illegal index.");
Node cur = dummyHead.next;
for(int i = 0 ; i < index ; i ++)
cur = cur.next;
return cur.e;
}
// 獲得鏈表的第一個(gè)元素
public E getFirst(){
return get(0);
}
// 獲得鏈表的最后一個(gè)元素
public E getLast(){
return get(size - 1);
}
遍歷初始時(shí)熬尺,讓游標(biāo) cur 指向索引為 0 的節(jié)點(diǎn)摸屠;當(dāng) i = 0 時(shí),cur 指向索引為 1 的節(jié)點(diǎn)粱哼;當(dāng) i == index - 1 時(shí)(循環(huán)停止的位置)季二,cur 指向索引為 index 的節(jié)點(diǎn),即待更新節(jié)點(diǎn)的位置(在做這一步分析的時(shí)候,很像枚舉數(shù)列的前幾個(gè)數(shù)胯舷,然后找規(guī)律的感覺(jué))刻蚯;
// 修改鏈表的第index(0-based)個(gè)位置的元素為e
// 在鏈表中不是一個(gè)常用的操作,練習(xí)用:)
public void set(int index, E e){
if(index < 0 || index >= size)
throw new IllegalArgumentException("Set failed. Illegal index.");
Node cur = dummyHead.next;
for(int i = 0 ; i < index ; i ++)
cur = cur.next;
cur.e = e;
}
包含 - boolean contains(E e)
注意遍歷的方式改為 while 循環(huán)桑嘶;
從索引為 0 的節(jié)點(diǎn)開(kāi)始遍歷炊汹;
循環(huán)終止的條件是游標(biāo) cur 指向 null 了,因?yàn)樵阪湵碇刑佣ィ?jié)點(diǎn)一個(gè)接一個(gè)不會(huì)中間出現(xiàn) null讨便,如果游標(biāo) cur == null 了,只有一種可能以政,cur 指向了最后一個(gè)節(jié)點(diǎn)(索引為 size - 1的元素)的下一個(gè)位置(索引為 size 的位置)器钟;
// 查找鏈表中是否有元素e
public boolean contains(E e){
Node cur = dummyHead.next;
while(cur != null){
if(cur.e.equals(e))
return true;
cur = cur.next;
}
return false;
}
String toString()
注意 while 循環(huán)的等價(jià) for 循環(huán)寫(xiě)法;
@Override
public String toString(){
StringBuilder res = new StringBuilder();
// Node cur = dummyHead.next;
// while(cur != null){
// res.append(cur + "->");
// cur = cur.next;
// }
for(Node cur = dummyHead.next ; cur != null ; cur = cur.next)
res.append(cur + "->");
res.append("NULL");
return res.toString();
}