前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[LeetCode] 82. Remove Duplicates from Sorted List II

[LeetCode] 82. Remove Duplicates from Sorted List II

作者头像
用户1148830
发布2018-01-04 09:50:31
6720
发布2018-01-04 09:50:31
举报

【原题】 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.

【解释】 给定一个已经排序的单链表,要求删除链表当中所有的重复结点。 【思路】 这里最坑的是leetcode上链表并不带有头结点的链表,结果导致要将待删除结点分为头结点和非头结点的判断,增加了很多不必要的操作。 要是有头结点世界该多美好啊! 还傻傻地做了很多判断,看到My accepted Java code的解法,有如醍醐灌顶,没有头结点不会自己造一个??? Mark一下。

代码语言:javascript
复制
public class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if(head==null) return head;
        ListNode fakeHead=new ListNode(0);//新建一个头结点
        fakeHead.next=head;
        ListNode pre=fakeHead, cur=head;
        while(cur!=null){
            while(cur.next!=null&&cur.val==cur.next.val)
                cur=cur.next;
            if(pre.next==cur)//相邻元素没有重复
                pre=pre.next;
            else 
            pre.next=cur.next;
            cur=cur.next;
          }
        return fakeHead.next;
    }
}

除此之外可以使用递归的解法。 参考My Recursive Java Solution

代码语言:javascript
复制
public class Solution {
    public ListNode deleteDuplicates(ListNode head) {
            if(head==null) return head;
        if(head.next!=null&&head.next.val==head.val){
                while(head.next!=null&&head.next.val==head.val)//循环直到找到一个不重复的node
                    head=head.next;

            return deleteDuplicates(head.next);
        }
        else head.next=deleteDuplicates(head.next);//相邻无重复
        return head;
        }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年07月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档