题目
递归解法
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head) {
if(!head || !head->next)
return head;
struct ListNode *p = head;
/*两个值不相等,代表该递归的短链表没有与之重复的元素
从而p指向下一个删除了重复元素的链表*/
if(p->val != p->next->val)
{
p->next = deleteDuplicates(p->next);
return p;
}
/*在这里,我们删除删除重复元素,就是遍历重复的p结点,
让它跳过这些结点,从而让p指向没有重复的结点*/
while(p && p->next)
{
if(p->val == p->next->val)
p = p->next;
else
break;
}
return deleteDuplicates(p->next);
}