題目一:
在o(1)時間刪除鍊錶結點。給定單向鍊錶的頭指標和乙個結點指標,定義乙個函式在o(1)時間刪除該結點。
思路:
由於單向鍊錶只有next指標,要刪除給定節點必須要知道它的上乙個節點,通常會從頭遍歷複雜度為o(n),不滿足題目,可以將給定節點的下乙個節點的值賦值給給定節點,然後刪除給定節點的下乙個節點,與刪除給定節點的效果相同。
**:
private
static listnode deletenode
(listnode head,listnode node)
listnode cur=head;
if(node.next!=null)
else
if(head==node)
else
cur.next=null;
}return head;
}
題目二:
在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。 例如,鍊錶1->2->3->3->4->4->5 處理後為 1->2->5。
思路:
兩個指標指向鍊錶元素,看是否相等,注意邊界條件,比如從頭結點開始就相等的情況以及中間相等的數字有多個等,都要考慮到。
**:
private
static listnode deleteduplicationnode
(listnode phead)
//注意備用頭結點,頭結點可能被刪除
listnode first =
newlistnode(-
1); first.next = phead;
listnode p = phead;
//前節點
listnode prenode = first;
while
(p != null && p.next != null)
prenode.next = p;
//刪除操作,前節點的next直接等於現在的節點,把中間的節點直接跨過
}else
}return first.next;
}
劍指offer 面試題18 刪除鍊錶的節點
給定單向鍊錶的頭指標和乙個節點指標,定義乙個函式在o 1 時間內刪除該節點。鍊錶節點與函式的定義如下 public static class listnode 將要刪除節點的next節點直接複製到該節點上。刪除原先的next節點 public void deletenode listnode hea...
劍指Offer面試題18 刪除鍊錶的節點
刪除鍊錶的節點 struct listnode void deletenode listnode plisthead,listnode ptobedelete if ptobedelete next nullptr 要刪除的節點不是尾節點 else 要刪除的節點為尾節點 p next nullptr...
劍指offer 面試題18 刪除鍊錶的節點
給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。注意 此題對比原題有改動 示例 1 輸入 head 4,5,1,9 val 5 輸出 4,1,9 解釋 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 1 9.示例 2 輸入...