题目描述:删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次
例如:
给出的链表为1->1->2,返回1->2.
给出的链表为1->1->2->3->3,返回1->2->3.

个人思路:设置辅助指针temp,设置新的链表头head1==head。从链表的开始,对比指针链表的val与指针链表的下一个链表的值,
如果相同,辅助指针后移一位,
如果不同,将head1.next=temp.next;
                      head=head1.next;
代码实现通过率为15%,用例:
{}
对应输出应该为:
{}
你的输出为:
java.lang.NullPointerException
import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    public ListNode deleteDuplicates (ListNode head) {
        // write code here
        if(head.next==null)
            return head;
        if(head.next.next==null)
            return head;
        ListNode temp=head.next;
        ListNode head1=head;
        while(head.next!=null&&head!=null){
            if(temp.next.val==temp.val){
                temp=temp.next;
            }
            else{
            head1.next=temp.next;
            head=head1.next;
            }
        }   
        return head1;
    }
}
高赞思路相似,设置cur,利用cur遍历找前后不重复的节点。

代码实现
import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    public ListNode deleteDuplicates (ListNode head) {
        // write code here
        ListNode cur=head;
        while(cur!=null){
            while(cur.next!=null&&cur.val==cur.next.val){
                ListNode temp=cur.next.next;    //这里牵扯到内存泄漏的问题,原回答为  cur.next=cur.next.next;
                 cur.next.next=null;                  cur.next=temp;
            }
            cur=cur.next; 
        }
        return head;
    }
}
内存泄漏:
在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。