83. Remove Duplicates from Sorted List
原题链接
Given a sorted linked list, delete all duplicates such that each element appear only once.
给一个有序链表,删除重复元素
For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.
思路:
- 看到题就回想了一下单链表的节点删除
- 删除head->next,则head->next = head->next->next;
- 想到两种方法,递归和循环
代码1:递归
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
//递归
ListNode* deleteDuplicates(ListNode* head) {//9ms
ListNode* temp = head;
return Delete(head, temp);
}
ListNode* Delete(ListNode* head, ListNode* temp) {
if(head == nullptr || head->next == nullptr)
return temp;
if(head->val == head->next->val)
head->next = head->next->next;
else//只有前后两个节点值不一样才可以head = head->next; 注意连续三个相同数的情况,我在这里被坑了好几次
head = head->next;
return Delete(head, temp);
}
};
代码2:循环
//循环
ListNode* deleteDuplicates(ListNode* head) {//12ms
if(head == nullptr)
return head;
ListNode* temp = head;
while(temp != nullptr){
if(temp->next == nullptr)
break;
if(temp->val == temp->next->val)
temp->next = temp->next->next;
else
temp = temp->next;
}
return head;
}