題目描述:
在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留。
樣例1
輸入:1->2->3->3->4->4->5
輸出:1->2->5
樣例2
輸入:1->1->1->2->3
輸出:2->3
分析:
本題與一般去重不同之處是:對於重複的元素,乙個不留。於是很可能刪除後,鍊錶為空。為了防止頭結點被刪,我們需要定義乙個虛擬頭結點指向head(其實定義乙個頭指標即可)。之後,依靠指標不斷的比較,我採用的是三指標,當然也可以削減為雙指標。遇見重複的就刪掉,接上鏈,否則,指標右移即可。
注意:只要指標右移了,而且要訪問其val或者next,則使用前必須判空,否則會造成段錯誤。
/**
* definition for singly-linked list.
* struct listnode
* };
*/class solution
if(q == null) break;
while(q != null && q->val == t->val)
p->next = q;
t = q;
if(q != null) q = q->next;
}return vhead->next;
}};
AcWing 29 刪除鍊錶中重複的節點
在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留。樣例1輸入 1 2 3 3 4 4 5 輸出 1 2 5樣例2 輸入 1 1 1 2 3 輸出 2 3先建立乙個dummy節點,然後cur等於dummy節點,pre節點等於head。然後先判斷是否head的next節點為...
刪除重複鍊錶
在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 class solution listnode newhead listnode malloc sizeof listnode newhead ...
鍊錶 刪除鍊錶中重複的節點
刪除鍊錶中重複的節點 方法一 採用遞迴的方法,但這種方法在鍊錶無重複節點時效率不高 function deleteduplication phead if phead.val phead.next.val return deleteduplication node 採用遞迴的方法從下乙個不重複的點開...