給定一個整數值和一個指向鏈表頭的指針,如何從列表中刪除所有大於指定值的節點?從鏈表中刪除大於指定值的節點
例如
列表:10-> 34-> 11-> 19-> 26-> 55-> 17 值:19 輸出:10-> 11-> 17(所有大於19的節點需要移除)
(邊緣的情況下)
列表:10-> 3-> 17-> 5-> 2-> 14-> 7 值:9 輸出:3-> 5-> 2-> 7(所有節點大於9需要刪除)
我不是在尋找確切的代碼,只是一個算法來解決這個問題!
給定一個整數值和一個指向鏈表頭的指針,如何從列表中刪除所有大於指定值的節點?從鏈表中刪除大於指定值的節點
例如
列表:10-> 34-> 11-> 19-> 26-> 55-> 17 值:19 輸出:10-> 11-> 17(所有大於19的節點需要移除)
(邊緣的情況下)
列表:10-> 3-> 17-> 5-> 2-> 14-> 7 值:9 輸出:3-> 5-> 2-> 7(所有節點大於9需要刪除)
我不是在尋找確切的代碼,只是一個算法來解決這個問題!
第一分配臨時節點到起始節點
然後,你必須三種情況鏈表 ..
如果在第一位置所需的節點,然後作出啓動等於start->next
和刪除臨時節點
如果它在中間,則使另一個節點在temp之前立即停止,並使該節點的下一個等於下一個temp,然後如果它處於最後位置,則使其之前的節點的下一個成爲等於nullptr
就是這樣。
private static Node removeNodes(Node start, int x) {
if(start == null) return start;
if(start.data > x && start.next == null) return null;
//find first head node
Node cur = start;
Node prev = null;
//4,5,3,2,1,6 --- where x = 2
while(cur != null && cur.data > x) {
prev = cur;
cur = cur.next;
}
if(prev != null) prev.next = null;
Node newHead = cur;
while(cur.next != null) {
if(cur.next.data > x) {
cur.next = cur.next.next;
} else {
cur = cur.next;
}
}
return newHead;
}
'std :: list :: remove_if' http://en.cppreference.com/ W/CPP /容器/列表/刪除 –
我不需要stl實現...但我正在尋找一種算法來實現它自己! –
請解釋你爲什麼不使用'std :: list'?如果這是一項任務,那麼請顯示您迄今嘗試的內容。 –