题目描述
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
分析
可以使用快慢指针覆盖重复元素,也可以使用递归的方法覆盖。
代码
快慢指针
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if (!head || !head -> next) return head;
ListNode* p = head;
ListNode* q = head -> next;
while (p -> next != NULL && p != NULL)
if (p->val == q -> val) {
p -> next = q ->next;
q = q -> next;
}
else {
p = p -> next;
q = q -> next;
}
}
};
递归
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if (!head || !head -> next) return head;
head -> next = deleteDuplicates(head -> next);
if (head -> next -> val == head ->val) head = head -> next;
return head;
}
};