问题描述:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,且重复结点不保留,返回链表的头指针。
问题举例:1–2--3–3--3–4--4–5处理后为:1–2--5
**思路分析:**定义引用,在无重复值的情况下,两指针联动向后走,遇到相等的值,前一个指针p向后,后一个指q针不动,在用另一个指针x记录q的前驱
代码实现
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
{
if (pHead == null) {
return null;
}
ListNode prev = null;
ListNode p1 = pHead;
ListNode p2 = pHead.next;
while (p2 != null) {
if (p1.val != p2.val) {
prev = p1;
p1 = p2;
p2 = p2.next;
} else {
while (p2 != null && p2.val == p1.val) {
p2 = p2.next;
}
if (prev == null) {
pHead = p2;
} else {
prev.next = p2;
}
p1 = p2;
if (p2 != null) {
p2 = p2.next;
}
}
}
return pHead;
}
}