本文參考自《劍指offer》一書,代碼采用Java語言。 更多:《劍指Offer》Java實現合集 題目 給定單向鏈表的頭指針和一個結點指針,定義一個函數在O(1)時間刪除該結點。 思路 通常那樣從頭開始查找刪除需要的時間為O(n),要在O(1)時間刪除某結點,可以這樣實現 ...
一 題目:在O 時間刪除鏈表結點 題目:給定單向鏈表的頭指針和一個結點指針,定義一個函數在O 時間刪除該結點。 原文采用的是C C ,這里采用C ,節點定義如下: 要實現的DeleteNode方法定義如下: 二 解題思路 . 常規思路 在單向鏈表中刪除一個結點,最常規的做法無疑是從鏈表的頭結點開始,順序遍歷查找要刪除的結點,並在鏈表中刪除該結點。這種思路由於需要順序查找,時間復雜度自然就是O n ...
2015-08-28 00:49 2 1748 推薦指數:
本文參考自《劍指offer》一書,代碼采用Java語言。 更多:《劍指Offer》Java實現合集 題目 給定單向鏈表的頭指針和一個結點指針,定義一個函數在O(1)時間刪除該結點。 思路 通常那樣從頭開始查找刪除需要的時間為O(n),要在O(1)時間刪除某結點,可以這樣實現 ...
題目: 在一個排序的鏈表中,存在重復的結點,請刪除該鏈表中重復的結點,重復的結點不保留,返回鏈表頭指針。 例如,鏈表1->2->3->3->4->4->5 處理后為 1->2->5 思路: 由於頭結點有可能被刪除,因此需要創建新的頭結點 ...
題目:給定單向鏈表的頭指針和一個節點指針,定義一個函數在O(1)時間刪除該節點。 由於給定的是單向鏈表,正常刪除鏈表的時間復雜度是查找鏈表的時間復雜度即O(n),如果要求在O(1)時間復雜度內刪除節點,通過遍歷鏈表找到該節點的上一節點和下一節點的方法是行不通了。所以實現的思路是,根據給定的要刪除 ...
,而又是單項鏈表,不能在O(1)時間內得到被刪除結點前面的那一個結點的指針,所以我們原先的方法是不能在O(1 ...
題目: 一個鏈表中包含環,請找出該鏈表的環的入口結點。 思路: 1、哈希表 遍歷整個鏈表,並將鏈表結點存入哈希表中(這里我們使用容器set),如果遍歷到某個鏈表結點已經在set中,那么該點即為環的入口結點; 2、兩個指針 如果鏈表存在環,那么計算出環的長度n,然后准備兩個指針pSlow ...
題目: 請實現函數ComplexListNode* Clone(ComplexListNode* pHead),復制一個復雜鏈表。 在復雜鏈表中,每個結點除了有一個pNext指針指向下一個結點之外,還有一個pSibling指向鏈表中的任意結點或者NULL。 結點的定義 ...
一、題目:反轉鏈表 題目:定義一個函數,輸入一個鏈表的頭結點,反轉該鏈表並輸出反轉后鏈表的頭結點。 鏈表結點定義如下,這里使用的是C#描述: 二、解題思路 2.1 借助外部空間的解法一 由於題目並沒有要求必須原地反轉,因此可以借助外部空間實現 ...
一、題目:從尾到頭打印鏈表 題目:輸入一個鏈表的頭結點,從尾到頭反過來打印出每個結點的值。 到解決這個問題肯定要遍歷鏈表。遍歷的順序是從頭到尾的順序,可輸出的順序卻是從尾到頭。也就是說第一個遍歷到的結點最后一個輸出,而最后一個遍歷到的結點第一個輸出。這就是典型的“后進先出 ...