题目来源
相似的题目:83. 删除排序链表中的重复元素
题目描述
struct ListNode {
int val;
ListNode *next;
ListNode() : val(0), next(nullptr) {}
ListNode(int x) : val(x), next(nullptr) {}
ListNode(int x, ListNode *next) : val(x), next(next) {}
};
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
}
};
题目解析
注意,是删除所有的重复的值,并不是只保留一个
递归
ListNode* deleteDuplicates(ListNode* head) {
if(head == NULL || head->next == NULL){
return head;
}
ListNode *current = head->next;
if(current->val != head->val){
head->next = deleteDuplicates(head->next);
}else{
while (current != NULL && head->val == current->val){
current = current->next;
}
head = deleteDuplicates(current);
}
return head;
}
双指针
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null){
return head;
}
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode pre = dummy;
ListNode left = pre.next;
ListNode right = left;
while (right != null){
while (right.next != null && right.next.val == right.val){
right = right.next;
}
if(left ==right){
pre = left;
left = left.next;
right = right.next;
}else{
pre.next = right.next;
left = right = right.next;
}
}
return dummy.next;
}
}