删除链表中重复的结点

删除链表中重复的结点

http://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef

自己想到的是三指针解法,自己倒是没想到递归解。

三指针:

public class Solution {
    public ListNode deleteDuplication(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        ListNode h = new ListNode(-1); // 头结点,用于返回结果
        h.next = head;
        ListNode pre = h, cur = head, next; // 三指针
        while (cur != null && cur.next != null) {
            next = cur.next;
            if (cur.val == next.val) {
                while (next != null && next.val == cur.val) {
                    next = next.next;
                }
                pre.next = next;
                cur = pre.next;
            } else {
                pre = cur;
                cur = next;
            }
        }
        return h.next;
    }
}

排行榜里面的递归解太巧妙了,这里学习记录:

public class Solution {
    public ListNode deleteDuplication(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }

        ListNode next = head.next;
        if (head.val == next.val) { // 重复发生在起始节点的时候
            while (next != null && head.val == next.val) {
                next = next.next;
            }
            return deleteDuplication(next);
        } else {
            // 起始节点没有重复的时候
            head.next = deleteDuplication(head.next);
            return head;
        }
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-01 11:27
点赞 评论 收藏
分享
ohs的小木屋:比不少实习待遇高了
点赞 评论 收藏
分享
机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
06-17 21:57
门头沟学院 Java
白友:噗嗤,我发现有些人事就爱发这些,明明已读不回就行了,就是要恶心人
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务