# LeetCode 82 Remove Duplicates from Sorted List II（从已排序链表中移除重复元素）（Linked List）（*）

## 原文

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.

## 分析

1 -> 1 -> 2 -> 3 -> NULL

x -> 1 -> 1 -> 3 -> NULL

return x->next;

## 代码

C Plus Plus

ListNode *deleteDuplicates(ListNode *head) {
if (head == NULL || head->next == NULL) return head;
ListNode *newHead = new ListNode(0);

ListNode *c = newHead, *p = head;
while (p != NULL && p->next != NULL) {
if (p->val != p->next->val) {
c = c->next;
p = p->next;
} else {
while (p->next != NULL && p->val == p->next->val) {
p = p->next;
}
p = p->next;
c->next = p;
}
}
}

updated at 2016/08/14

ListNode* deleteDuplicates(ListNode *head) {
ListNode *newHead = new ListNode(0);
ListNode *c = newHead, *p = c->next;

while (c->next && c->next->next) {
if (c->next->val == c->next->next->val) {
p = p->next;
while (p->next && p->val == p->next->val) {
p = p->next;
}
c->next = p->next;
} else {
c = c->next;
p = p->next;
}
}
}

Java

updated at 2016/09/23

/**
* Definition for singly-linked list.
* public class ListNode {
*     int val;
*     ListNode next;
*     ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null) return head;
ListNode newHead = new ListNode(0);
ListNode c = newHead, p = c.next;

while (c.next != null && c.next.next != null) {
if (c.next.val == c.next.next.val) {
p = p.next;   // 标记要跳过的节点
while (p.next != null && p.val == p.next.val) {
p = p.next;  // 继续循环标记要删除的节点
}
c.next = p.next;
} else {
c = c.next;
p = p.next;
}
}
}
}

|
29天前
|

LeetCode第83题删除排序链表中的重复元素

26 2
|
2月前
【数据结构OJ题】移除链表元素

32 2
|
1月前
|

LeetCode初级算法题：反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题：反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
17 0
|
3月前
|

【数据结构与算法 刷题系列】移除链表元素
【数据结构与算法 刷题系列】移除链表元素
32 0
|
3月前
|
C++ 容器
【C++进阶】深入STL之list：高效双向链表的使用技巧
【C++进阶】深入STL之list：高效双向链表的使用技巧
41 0
|
3月前
|

LeetCode 83题：删除排序链表中的重复元素【面试】
LeetCode 83题：删除排序链表中的重复元素【面试】
19 0
|
3月前
|

LeetCode 题目 82：删除排序链表中的重复元素 II
LeetCode 题目 82：删除排序链表中的重复元素 II
25 0
|
3月前
|

java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
382 1
|
2月前
|
Java API Apache

33 1
|
2月前
|

PolarDB产品使用问题之使用List或Range分区表时，Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务，旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境，满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能，实现数据库的高效运维与持续优化。
26 3