LeetCode——Remove Duplicates from Sorted List

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.

猜你喜欢

转载自blog.csdn.net/sinat_22994595/article/details/88023857