Given a sorted linked list, delete all duplicates such that each element appear only once.
- Example 1:
Input: 1->1->2
Output: 1->2 - Example 2:
Input: 1->1->2->3->3
Output: 1->2->3
解法一——非递归
若相等则跳过这一节点
public ListNode deleteDuplicates(ListNode head) {
ListNode res=new ListNode(-1);
ListNode cur=res;
while(head!=null)
{
while(head.next!=null&&head.val==head.next.val)
head=head.next;
cur.next=head;
head=head.next;
cur=cur.next;
}
return res.next;
}
Runtime: 0 ms, faster than 100.00% of Java online submissions for Remove Duplicates from Sorted List.
Memory Usage: 37.9 MB, less than 17.19% of Java online submissions for Remove Duplicates from Sorted List.
更简洁的代码:
public ListNode deleteDuplicates(ListNode head) {
ListNode cur=head;
while(cur!=null&&cur.next!=null)
{
if(cur.val==cur.next.val)
cur.next=cur.next.next;
else
cur=cur.next;
}
return head;
}
Runtime: 0 ms, faster than 100.00% of Java online submissions for Remove Duplicates from Sorted List.
Memory Usage: 37.8 MB, less than 20.82% of Java online submissions for Remove Duplicates from Sorted List.
解法二——递归
实际上是从末尾开始向前遍历,删除重复的节点。
public ListNode deleteDuplicates(ListNode head) {
if(head==null||head.next==null)
return head;
head.next=deleteDuplicates(head.next);
return head.val==head.next.val?head.next:head;
}
Runtime: 0 ms, faster than 100.00% of Java online submissions for Remove Duplicates from Sorted List.
Memory Usage: Memory Usage: 37.6 MB, less than 52.73% of Java online submissions for Remove Duplicates from Sorted List.