082 Remove Duplicates from Sorted List II 有序的链表删除重复的结点 II

给定一个有序的链表,删除所有有重复数字的节点,只保留原始列表中唯一的数字。
例如:
给定 1->2->3->3->4->4->5 ,则返回 1->2->5
给定 1->1->1->2->3 ,则返回 2->3
详见:https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/description/

Java实现:

递归实现:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if(head==null||head!=null&&head.next==null){
            return head;
        }
        ListNode cur=null;
        if(head.val==head.next.val){
            cur=head.next;
            while(cur!=null&&cur.val==head.val){
                cur=cur.next;
            }
            return deleteDuplicates(cur);
        }else{
            cur=head.next;
            head.next=deleteDuplicates(cur);
            return head;
        }
    }
}

 非递归实现:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        ListNode first=new ListNode(-1);
        first.next=head;
        ListNode p=head;
        ListNode last=first;
        while(p!=null&&p.next!=null){
            if(p.val==p.next.val){
                int val=p.val;
                while(p!=null&&p.val==val){
                    p=p.next;
                }
                last.next=p;
            }else{
                last=p;
                p=p.next;
            }
        }
        return first.next;
    }
}

 

posted on 2018-04-03 23:10  lina2014  阅读(106)  评论(0编辑  收藏  举报

导航