题目描述:删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次
在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。
例如:
给出的链表为1->1->2,返回1->2.
给出的链表为1->1->2->3->3,返回1->2->3.
个人思路:设置辅助指针temp,设置新的链表头head1==head。从链表的开始,对比指针链表的val与指针链表的下一个链表的值,
如果相同,辅助指针后移一位,
如果不同,将head1.next=temp.next;
head=head1.next;
head=head1.next;
代码实现通过率为15%,用例:
{}
对应输出应该为:
{}
你的输出为:
java.lang.NullPointerException
{}
对应输出应该为:
{}
你的输出为:
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所回收,然而它却占用内存。