1.题目
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5
2.解法
用cur存储节点的值,如果next的值与之相等就一直走到不相等的位置。
public ListNode deleteDuplication(ListNode pHead) {
if (pHead == null) return null;
ListNode dummy = new ListNode(-1);
dummy.next = pHead;
ListNode p = dummy;
while (p.next!=null&&p.next.next!=null){
if(p.next.val==p.next.next.val){
int curval = p.next.val;
while (p.next!=null&&p.next.val==curval){
p.next = p.next.next;
}
}else {
p = p.next;
}
}
return dummy.next;
}
总结
需要使用哑结点,因为第一个节点就可能和第二个重复,为保证程序的简洁一致就从dummy出发。
算法系列在github上有一个开源项目,主要是本系列博客的demo代码。https://github.com/forestnlp/alg
如果您对软件开发、机器学习、深度学习有兴趣请关注本博客,将持续推出Java、软件架构、深度学习相关专栏。
您的支持是对我最大的鼓励。