解题思路:
这道题就是首先建立一个newHead,然后遍历传进来的head的值,如果有重复的就跳过,否则就加到newHead的后面。最后返回newHead->next即可
此外这道题后面有个Solution还蛮好的。
https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/discuss/28335/My-accepted-Java-code
public ListNode deleteDuplicates(ListNode head) {
if(head==null) return null;
ListNode FakeHead=new ListNode(0);
FakeHead.next=head;
ListNode pre=FakeHead;
ListNode cur=head;
while(cur!=null){
while(cur.next!=null&&cur.val==cur.next.val){
cur=cur.next;
}
if(pre.next==cur){ //核心代码
pre=pre.next; //核心代码
} //核心代码
else{ //核心代码
pre.next=cur.next; //核心代码
}
cur=cur.next;
}
return FakeHead.next;
}
提交代码:
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null)
return head;
ListNode newHead=new ListNode(-1);
newHead.next=null;
boolean flag=true;
ListNode p=head,pTmp=head,phead=newHead;
while(p!=null) {
pTmp=p;p=p.next;
while(p!=null&&p.val==pTmp.val) {
flag=false;p=p.next;
}
if(flag) {
phead.next=pTmp;
phead=phead.next;
phead.next=null;
}
flag=true;
}
return newHead.next;
}
}
运行结果: