删除链表中重复的结点

删除链表中重复的结点

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;
        }
    }
}
全部评论

相关推荐

我是小红是我:学校换成中南
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务