在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
public ListNode deleteDuplication(ListNode pHead){
}
此题处理起来棘手的有两个地方:
deleteMode
)
经过上述两步分析,我们终于可以安心遍历结点了:
public ListNode deleteDuplication(ListNode pHead){
if(pHead == null){
return null;
}
ListNode node = new ListNode(Integer.MIN_VALUE);
node.next = pHead;
ListNode pre = node, p = pHead;
boolean deletedMode = false;
while(p != null){
if(p.next != null && p.next.val == p.val){
p.next = p.next.next;
deletedMode = true;
}else if(deletedMode){
pre.next = p.next;
p = pre.next;
deletedMode = false;
}else{
pre = p;
p = p.next;
}
}
return node.next;
}
出自:http://www.zhenganwen.top
已获授权
END