/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode deleteDuplication(ListNode pHead)///使用了辅助空间 避免了头结点需要删除的复杂情况
{
if(pHead==null) return null;
ListNode p1=new ListNode(0);//申请一个结点作为头结点 避免了链表头结点需要删除的复杂情况
p1.next=pHead;//连接
ListNode p2=p1;///使用左右双指针 p2作为左指针 p3作为右指针
ListNode p3=p2.next;
while(p2.next!=null){//遍历链表
if(p3.next==null||p3.val!=p3.next.val){//p3与下一个结点的value不同 不需要删除p3
p2=p3;
}
else{
while(p3.next!=null&&p3.val==p3.next.val){//p3与下一个结点的value相同 两者都需要删除
p3=p3.next;
}
//此时需要删除的是开始时的p3(即p2.next结点)现在的p3之间的结点(包括两者)
p3=p3.next;
p2.next=p3;
//p2=p3; 连续不同重复
}
p3=p2.next;
}
return p1.next;
}
}
删除链表中重复的结点
最新推荐文章于 2023-04-13 17:17:20 发布