给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
我的未优化的代码
public static ListNode deleteDuplicates(ListNode head) {
if(head == null){
return null;
}else {
ListNode listNode = head.next;
ListNode s1 = new ListNode(head.val);
ListNode s3 = s1;
while (listNode != null) {
int value = head.val;
if(value == listNode.val){
System.out.println("相等");
listNode = listNode.next;
}else {
System.out.println("不相等");
ListNode s2 = new ListNode(listNode.val);
s1.next = s2;
s1 = s2;
head = listNode;
listNode = listNode.next;
}
}
return s3;
}
}
经过优化过后的代码
不知道为什么会提高这么多,只是将空间复杂度降低了。。。
public static ListNode deleteDuplicates(ListNode head) {
ListNode s4 = head;
if(head == null){
return null;
}else {
ListNode listNode = head.next;
while (listNode != null) {
int value = head.val;
if(value == listNode.val){
listNode = listNode.next;
head.next = null;
}else {
head.next = listNode;
head = listNode;
listNode = listNode.next;
}
}
return s4;
}
}
排名靠前的代码,不得不说这个代码简单易懂,好吧,不是很容易懂,但是执行效率高
class Solution {
public ListNode deleteDuplicates(ListNode head) {
//递归到底
if (head == null) {
return head;
}
head.next=deleteDuplicates(head.next);
if ( head.next!=null && head.val== head.next.val) {
return head.next;
}
return head;
}
}
19年7月13日重置版本,使用next这样就避免了申请很多的内存nice
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode root = new ListNode(-1);
root.next = head;
ListNode tem = root;
while (root.next != null && root.next.next != null) {
if(root.next.val == root.next.next.val){
root.next = root.next.next;
}else {
root = root.next ;
}
}
return tem.next;
}
}