按索引刪除鏈表中的節(jié)點 - E remove(int index)
- 刪除節(jié)點還是要找到待刪除節(jié)點的前驅(qū)節(jié)點吹榴;
- 同時取出待刪除節(jié)點潮太,作為前驅(qū)節(jié)點“跨越”自己的橋梁缸匪;
// 從鏈表中刪除index(0-based)位置的元素, 返回刪除的元素
// 在鏈表中不是一個常用的操作挟伙,練習用:)
public E remove(int index){
if(index < 0 || index >= size)
throw new IllegalArgumentException("Remove failed. Index is illegal.");
Node prev = dummyHead;
for(int i = 0 ; i < index ; i ++)
prev = prev.next;
Node retNode = prev.next;
prev.next = retNode.next;
retNode.next = null;
size --;
return retNode.e;
}
// 從鏈表中刪除第一個元素, 返回刪除的元素
public E removeFirst(){
return remove(0);
}
// 從鏈表中刪除最后一個元素, 返回刪除的元素
public E removeLast(){
return remove(size - 1);
}
按元素刪除鏈表中的節(jié)點 - void removeElement(E e)
- 注意 while 循環(huán)的條件
prev.next != null
真竖,鏈表這種數(shù)據(jù)結(jié)構(gòu)不會存在兩個節(jié)點之間出現(xiàn)一個 null
的情況,null
只會出現(xiàn)在最后一個節(jié)點之后详幽,所以當 prev.next == null
時筛欢,prev
已經(jīng)指向了最后一個節(jié)點;
-
prev
由 dumyHead
開始唇聘,走完第一次循環(huán)后指向第一個節(jié)點版姑,所以循環(huán)標號 i
和 prev
指向的節(jié)點的索引一一對應;
// 從鏈表中刪除元素e
public void removeElement(E e){
Node prev = dummyHead;
while(prev.next != null){
if(prev.next.e.equals(e))
break;
prev = prev.next;
}
// prev.next不是最后一個節(jié)點
if(prev.next != null){
Node delNode = prev.next;
prev.next = delNode.next;
delNode.next = null;
size --;
}
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者