给定一个已排序的链表的头
head
, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。示例 1:
输入:head = [1,1,2] 输出:[1,2]示例 2:
输入:head = [1,1,2,3,3] 输出:[1,2,3]解题思路:
1.如果该链表是空的,则不用删除,直接返回头节点即可。
2.由题目已知,该链表是已排序的,则链表中重复的元素必然是相邻的,即去比较head->val与head->next->val的值是否相等,若相等则删掉head->next。
3.定义一个指针,从头节点开始,因为要判断head->val是否等于head->next->val所以去以指针p->next!=NULL为结束条件。
struct ListNode* deleteDuplicates(struct ListNode* head){
if (!head)
{
return head;
}
struct ListNode *p=head;
while (p->next)
{
if (p->val==p->next->val)
{
p->next=p->next->next;
}
else
{
p=p->next;
}
}
return head;
}