leetcode算法,我写的错的 求指导为什么。

图片说明

图片说明

求解:

 /** 
 * Definition for ListNode 
 * public class ListNode { 
 *     int val; 
 *     ListNode next; 
 *     ListNode(int x) { 
 *         val = x; 
 *         next = null; 
 *     } 
 * } 
 */  
public class Solution {  
    /** 
     * @param ListNode head is the head of the linked list 
     * @return: ListNode head of linked list 
     */  
    public static ListNode deleteDuplicates(ListNode head) {   
        // write your code here  
        if(head==null){  
            return null;  
        }  
        ListNode list=head;  
        while(list.next!=null){  
            if(list.val==list.next.val){  
                if(list.next.next==null){  
                    list.next=null;  
                }else{  
                    ListNode node=list.next;  
                    list.next=node.next;  
                }  
            }else{  
                list=list.next;  
            }  
        }  
        return head;  

    }    
}  

目测你的代码少了一行
if (node.val == node.next.val)
这里如果相等,那么将当前链表节点接上下面那个,这个没错
但如果不相等呢,你什么也没做,这导致死循环了
所以应该
else
{
head = head.next; //把它移到else分支,如果相等,那么因为head已经指向next.next了,不需要
}

if (head.val==head.next.val) {
head.next = head.next.next;
head = head.next;
}
这里的判断有问题:
~
例如输入: 1、1、1、2、3

根据你的判断,头节点的值等于下一个节点的值,会删除第二个节点,然后你把头结点指向了删除后的下一个节点(也就是第三个节点)

                       ~
变成这样:1、1、2、3

重复的1就不能完全去掉。凡是超过3个连续的重复节点就去不掉了。

修改为下面应该就没问题了:

if (head.val==head.next.val) {
head.next = head.next.next;
}else{
head = head.next;
}