Q82. Remove Duplicates from Sorted List II
直达:https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/description/
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving onlydistinctnumbers from the original list.
For example,
Given1->2->3->3->4->4->5
, return1->2->5
.
Given1->1->1->2->3
, return2->3
.
分析
增加两个辅助指针,d_head作为伪头节点,p_haed辅助删除数据
需要注意的几个边界情况及解决方案
头节点需要删除:设置伪头节点,伪头节点的下个元素是head,返回的时候返回d_head的下一个节点
最后一个节点需要删除:判断是否是最后一个节点,如果是的话将p指向空,返回结果
C++代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(head == NULL) return head;
ListNode* d_head = new ListNode(0);
ListNode* p_head = d_head;
d_head -> next = head;
while(head->next){
if(head->val == head->next->val){
int del_val = head->val;
while(head->val == del_val){
if(head->next) head = head->next;
else{
p_head->next = NULL;
return d_head->next;
}
}
p_head->next = head;
}else{
p_head = head;
head = head->next;
}
}
return d_head->next;
}
};
Last updated
Was this helpful?