[LintCode] Remove Duplicates form Sorted List I & II

发布时间:2019-06-11 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了[LintCode] Remove Duplicates form Sorted List I & II脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

Remove Duplicates form Sorted List I

PRoblem

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

Example

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

Note

遇到后一个结点和当前结点相等,就用当前结点指向下一个的下一个结点。

Solution

public class Solution {
    public static ListNode deleteDuplicates(ListNode head) { 
        if (head == null) return head;
        ListNode node = head;
        while (node.next != null) {
            if (node.val == node.next.val) node.next = node.next.next;
            else node = node.next;
        }
        return head;
    }  
}

Remove Duplicates form Sorted List II

Problem

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

Example

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

Note

和上一道题不同的地方就是,需要用双指针操作,且最后要返回dummy.next,以head结点即duplicate的情况返回错误的结果。
pre = dummy, cur = head,用cur进行查重操作,precur的前结点。当curcur.next等值的时候,cur后移至第一个不等值的点,用pre指向新的cur即可。

Solution

public class Solution {
    public static ListNode deleteDuplicates(ListNode head) {
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode pre = dummy, cur = head;
        while (cur != null && cur.next != null) {
            if (cur.val == cur.next.val) {
                int val = cur.val;
                while (cur != null && cur.val == val) cur = cur.next;
                pre.next = cur;
            }
            else {
                pre = pre.next;
                cur = cur.next;
            }
        }
        return dummy.next;
    }
}

脚本宝典总结

以上是脚本宝典为你收集整理的[LintCode] Remove Duplicates form Sorted List I & II全部内容,希望文章能够帮你解决[LintCode] Remove Duplicates form Sorted List I & II所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。