第16&17题 Remove Duplicates from Sorted List

来源:互联网 发布:淮海战役 知乎 编辑:程序博客网 时间:2024/06/11 08:47

Remove Duplicates from Sorted List I

Given a sorted linked list, delete all duplicates such that each element appear only once.

For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.

Solution:

<span style="font-weight: normal;">/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null; *     } * } */public class Solution {    public ListNode deleteDuplicates(ListNode head) {        if(head==null || head.next==null) return head;        ListNode prev = head, cur = head.next;        while(cur!=null){            if(prev.val==cur.val){//remove cur from the list                prev.next=cur.next;                 cur=cur.next;            }            else{                prev=prev.next;                cur=cur.next;            }        }        return head;            }}</span>

Remove Duplicates from Sorted List II

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.

<span style="font-size:18px;">/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null; *     } * } */public class Solution {    public ListNode deleteDuplicates(ListNode head) {        if(head==null || head.next==null) return head;        ListNode newHead = new ListNode(0);//create a new empty head, the value of the new head will not be counted in        newHead.next=head;        ListNode prev = newHead, cur=head;        while(cur!=null&&cur.next!=null){            if(cur.val!=cur.next.val){                prev=prev.next;                cur=cur.next;            }else{                while(cur.next!=null&&cur.next.val==cur.val)    cur=cur.next;                //remove nodes from prev.next to cur                prev.next=cur.next;                cur=cur.next;            }        }        return newHead.next;    }}</span>
注意while的判断条件必须是cur!=null并且cur.next!=null。当遍历到list中只剩一个元素时(cur.next==null),显然不存在可能相等的情况。

0 0
原创粉丝点击