鍊錶問題(演算法題)

2022-03-19 07:07:22 字數 2231 閱讀 2584

1、從已排序的鍊錶中刪除重複的單元。如:

輸入:1->1->2,輸出:1->2

如:輸入:1->1->2->2->3,輸出 1->2->3

思路:雙指標;

快指標先往後移動,如果快指標的值不等於慢指標的值,就釋放掉中間的指標空間,並且將慢指標next指向快指標,把快指標賦值給快指標。

node* deleteduplicationnodefromsortedlist(node* &phead)

node* node_slow =phead;

node* node_fast =phead;

while (node_fast !=null)

node_fast = node_fast->next;

}if (node_slow->next !=node_slow)

return

phead;

}

2、給定有序鍊錶,刪除出現三次以上的元素。如:

輸入:1->1->2->3->3->3

返回:1->1->2

思路:雙指標

如果快指標的值不等於慢指標的值,那麼快慢指標就都往前走一步;如果遇到相同的數,快指標就繼續往前走,同時計數,超過三次以後就接著走直到碰到新數字以後修改慢指標的next

//

這個還是有點複雜的,我想了挺久的

//主要難點在於如果沒有頭結點的鍊錶進來第乙個結點值是大於3的怎麼處理

//在慢指標的值不等於快指標的值的時候

node* deleteduplicationnodethreetimes(node* &phead)

node* node_slow =phead;

node* node_before =node_slow;

node* node_fast = phead->next;

while (node_fast !=null)

if (delete_cnt >= 3

)

else

node_fast = node_fast->next;

}return

phead;

}

node* deleteduplicationnodethreetimes(node* &phead)

node* node_slow =phead;

node* node_before =node_slow;

node* node_fast = phead->next;

while (node_fast !=null)

if (cnt >= 3

)

else}}

return

phead;

}

3、給定無序鍊錶,刪除出現三次以上的元素。

思路:hash演算法

兩次遍歷,第一次遍歷統計元素出現的次數,第二次遍歷檢視對應的value值出現次數是否大於3,是就刪除,否則就繼續走。

//

預設傳進來的鍊錶是帶有頭結點的

node* deletenodethreetimesfromunordered(node* &phead)

unordered_map

hash_value;

node* node_tmp = phead->next;

while(node_tmp !=null)

node_tmp =phead;

while (node_tmp->next !=null)

else

}return

phead;

}

4、無序列表,要求出現次數不能超過本身的value值。

思路:hash

兩次遍歷。第一次遍歷統計元素次數,第二次遍歷檢視出現次數是否超過value值,超過就刪除,並且把對應的hash的value值減1.

node* deletenodeovervaluetimesfromunordered(node* &phead)

unordered_map

hash_value;

node* node_tmp = phead->next;

while (node_tmp !=null)

node_tmp =phead;

while (node_tmp->next !=null)

else

}return

phead;

}

鍊錶演算法題

leetcode鏈結 利用棧先入先出 definition for singly linked list.struct listnode class solution p head while p p head 需要找到頭節點的位置 return p 雙指標,畫 決 leetcode鏈結 class...

鍊錶 常見演算法題

struct listnode 定義鍊錶 就是最簡單的迴圈計數 int calculate listnode phead return nlength 採用 頭插法 順序遍歷原鍊錶,挨個將結點頭插到新鍊錶中。注意要先把這個結點給copy一下,去把副本進行頭插,不然的話原鍊錶關係就斷了 這樣的頭插法可...

鍊錶高頻演算法題

class solutionif l2 listnode dummy new listnode listnode res dummy res next null while l1 l2 else if l1 if l2 return dummy next class solution listnod...