题意:给一个排序链表,要求删除其中的所有重复结点(包括自身),返回删除后的头结点
思路:主要有几个要注意的点,一个是头结点也可能重复,重复完后的下一个值不同的结点还可能接着重复,需要找到第一个不重复的结点,再从这个结点往后找,记录最后一个不重复的结点,没有重复的时候更新这个结点,否则找到下一个不重复结点,将其连接起来,直到处理到链表末尾即可
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
{
if (pHead == null)
return null;
boolean flag1 = false;
while (pHead.next != null && pHead.next.val == pHead.val) {
pHead = pHead.next;
flag1 = true;
}
while (flag1) {
pHead = pHead.next;
if (pHead == null)
return null;
if (pHead.next == null || pHead.next.val != pHead.val)
break;
while (pHead.next != null && pHead.next.val == pHead.val) {
pHead = pHead.next;
}
}
ListNode node = pHead.next, pre = pHead;
while (node != null) {
boolean flag = false;
while (node.next != null && node.next.val == node.val) {
node = node.next;
flag = true;
}
if (flag)
pre.next = node.next;
else
pre = pre.next;
node = node.next;
}
return pHead;
}
}