給定單向鏈表的頭指針和一個(gè)結(jié)點(diǎn)指針,定義一個(gè)函數(shù)在O(1)時(shí)間刪除該結(jié)點(diǎn)
錯(cuò)誤思路:從鏈表結(jié)點(diǎn)開始,循序便利查找要?jiǎng)h除的結(jié)點(diǎn),并在鏈表刪除結(jié)點(diǎn)
正確思路:已知要?jiǎng)h除的結(jié)點(diǎn)可得下一個(gè)結(jié)點(diǎn),那么我們可以將下一個(gè)結(jié)點(diǎn)內(nèi)容復(fù)制到當(dāng)前結(jié)點(diǎn)。同時(shí)注意首位結(jié)點(diǎn)
public static void delete(ListNode head,ListNode target){
if(head==null||target==null){
return;
}
if(head.getNext()==null){
if(head==target){
head=null;
}else{
return;
}
}
if(target.getNext()==null){
ListNode currentNode = head;
while(currentNode.getNext()!=null){
currentNode = currentNode.getNext();
}
currentNode.setNext(null);
}
if(target.getNext()!=null){
target.setValue(target.getNext().getValue());
if(target.getNext().getNext()!=null){
target.setNext(target.getNext().getNext());
}else{
target.setNext(null);
}
}
}
原文鏈接:http://blog.csdn.net/qq_22329521/article/details/53164557