题目描述:
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.
这个题做了好久,碰到这种情况很多的,都要考虑清楚。
复杂的就一步一步来,先找到第一个与紧挨着的数是不一样的作为head。
到底是否为空,不为空怎么走,为空又怎么走,前面的数是重复过的还是没有重复过的都要想清楚。
代码如下:
public ListNode deleteDuplicates(ListNode head) {
//找到真正的head,这个head与head.next不同
head=findHead(head);
if(head==null||head.next==null){
return head;
}
ListNode pre=head,cur=head.next;
boolean duplicate=false;
while(cur!=null){
ListNode next=cur.next;
if(next!=null){
if(next.val==cur.val){
duplicate=true;
}else if(duplicate){
pre.next=next;
duplicate=false;
}else{
pre=cur;
}
}else if(duplicate){
//后面一直都是重复的数要在pre后赋空值,如1,2,2,3,3,此时结果1->null
pre.next=null;
}else{
pre.next=cur;
}
cur=cur.next;
}
return head;
}
public ListNode findHead(ListNode head){
if(head==null||head.next==null){
return head;
}
ListNode pre=head,cur=head.next;
if(pre.val!=cur.val)
return pre;
while(cur!=null){
if(pre.val!=cur.val){
break;
}
cur=cur.next;
}
return findHead(cur);
}
本文介绍了一种算法,用于从已排序的链表中移除所有具有重复数值的节点,只保留原始列表中的唯一数值。提供了详细的实现思路及Java代码示例。
710

被折叠的 条评论
为什么被折叠?



