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...