该题我也是大意了,一开始没有认真审题,没有看到给的链表是排好序的!!!
给的链表是排好序的意味着:所有链表中重复出现的元素都挨在一起!!!
那么我们只需遍历链表遇到一个结点与下一个结点相同的情况就直接将该结点连到下下个结点
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode* p=head;
if(!head)//空链表单独判断
{
return NULL;
}
while(p->next&&p)
{
if(p->val==p->next->val)
{
p->next=p->next->next;
}
else
{
p=p->next;
}
}
return head;
}
};