在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。
例如,鍊錶1->2->3->3->4->4->5 處理後為 1->2->5
題目分析:
有序鍊錶相鄰的元素必然在一起,比較鍊錶元素的值。
分析過程
遞迴方法
注意
考慮當鍊表為空時,和鍊錶只有乙個節點時的情況
注意cur && phead->val==cur->val
這個條件,對於結點重複兩次以上,有很重要的作用。
/*
struct listnode
};*/
class solution
listnode* cur;
if(phead->val == phead->next->val)
return deleteduplication(cur);
}else}};
非遞迴方法過程如圖:
注意
解釋一下,為什麼最後不返回phead
,因為如果頭結點就是重複的呢,那刪除了以後,就找不到phead
這個頭了,所以,新建的乙個結點來作為頭,這個新的頭的下乙個節點始終是鍊錶的頭結點。
class solution
listnode* head=new listnode(0);
head->next=phead;
listnode* prev=head;
listnode* cur=head->next;
while(cur)
prev->next=cur->next;
cur=cur->next;
}else
}return head->next;}};
刪除有序鍊錶中重複出現的元素
給出乙個公升序排序的鍊錶,刪除鍊錶中的所有重複出現的元素,只保留原煉表中只出現一次的元素。例如 給出的鍊錶為1 2 3 3 4 4 5,返回1 2 5.給出的鍊錶為1 1 1 2 3,返回2 3.struct listnode class solution listnode phead new li...
刪除鍊錶中的所有重複出現的元素
刪除給出鍊錶中的重複元素 鍊錶中元素從小到大有序 使煉表中的所有元素都只出現一次 例 1 1 1 2 3,返回2 3 思路 1,如果下乙個節點和當前節點值相同,則刪除下乙個節點 刪除步驟 1.1,當前節點的下乙個為下乙個節點的下乙個 1.2,下乙個節點指向當前節點的下乙個 2,如果下乙個節點和當前節...
刪除鍊錶中重複的結點
題目描述 在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5。刪除鍊錶中重複的結點 author 過路的守望 public class duplicationnode 新建乙個節點指向頭結點 li...