给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
题解思路
有两种思路:
(1)用基本费的链表删除的方式,将数据相等的节点删除。
(2)新增一个链表,用递归的思想return新的链表。
第一种:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(NULL == head)
return NULL;
if( NULL != head->next )
{
ListNode* tmp = deleteDuplicates(head->next);
if(tmp->val == head->val)
return tmp;
head->next = tmp;
}
return head;
}
};
第二种:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(NULL == head)
return NULL;
ListNode* p = head;
ListNode* q = head->next;
while(NULL != q)
{
if(p->val == q->val)
{
q = q->next;
p->next = q;
}
else
{
p = q;
q = q->next;
}
}
return head;
}
};
执行用时 : 20 ms, 在Remove Duplicates from Sorted List的C++提交中击败了95.81% 的用户
内存消耗 : 9.3 MB, 在Remove Duplicates from Sorted List的C++提交中击败了12.64% 的用户