题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
注意:这里是重复则全部删除
分析
思路:
1、判断链表是否为空
2、因需要执行删除操作,故定义前驱结点pre和当前结点
3、遍历链表并判断是否有相同重复的结点,相同则全部删除
实现代码如下:
public class Solution {
public ListNode deleteDuplication(ListNode pHead){
//1、链表为空
if(pHead==null || pHead.next == null)
return pHead;
ListNode HeadNode = new ListNode(0);//添加头节点方便操作
HeadNode.next = pHead;//头节点接在链表的头部
//2、需要执行删除操作,故定义前驱结点pre、当前结点p
ListNode pre = HeadNode, p = HeadNode.next;
//3、遍历链表并判断是否有相同重复的结点,相同则全部删除
while(p != null){
if(p.next != null && p.val == p.next.val){
//如果当前结点和下个结点相同
while(p.next != null && p.val == p.next.val)//找到最后一个相同的结点
p = p.next;//跳过相同的结点
pre.next = p.next;//将最后一个相同的结点的下一个结点链接在pre之后,实现删除重复结点
p = p.next;//p后移一位
}
else{
//p.next=null或者下一个结点和当前结点不同,pre和p都后移
pre = pre.next;
p = p.next;
}
}
return HeadNode.next;
}
}