LeetCode 83删除排序链表中的重复元素Easy
-
题目简述:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
-
输入: 1->1->2 输出:1->2
输入:1->1->2->3->3 输出:1->2->3
-
思路:从前往后扫描整个链表,如果一个节点和其后继节点相同,则直接删除后继节点,否则指针移动到后继节点。
/**
* 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(head == NULL || head->next == NULL) return head;
auto p = head;
while(p->next)
{
if(p->val == p->next->val) p->next = p->next->next;
else p = p->next;
}
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(head == NULL || head->next == NULL) return head;
head->next = deleteDuplicates(head->next);
if(head->val == head->next->val)
return head->next;
else return head;
}
};