给定一个已排序的链表的头 head
, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
示例 1:
输入:head = [1,1,2] 输出:[1,2]
示例 2:
输入:head = [1,1,2,3,3] 输出:[1,2,3]
这里我用的是递归,我最近在练习递归
我是这样想的:
1.找递归出口。当这个链表为空或只有一个头结点时不需要排序直接return头结点指针
2.返回值。返回上一级已经删除重复数据的链表的头结点指针
3.这一级做什么。将前一个结点的next指向它后一个结点的后一个结点
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if (head == NULL || head->next == NULL)
return head;
if (head->val == deleteDuplicates(head->next)->val)//当这一级结点的数值与已经处理好的链表的第一个节点的数值相等
head->next = head->next->next;//说明有数据重复,删除处理好的链表的头结点
return head;
}
};