LeetCode 83. 删除排序链表中的重复元素

Posted 数据结构和算法

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 83. 删除排序链表中的重复元素相关的知识,希望对你有一定的参考价值。

截止到目前我已经写了 600多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载
下载链接https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取码:6666


这题说了链表中的值是按照升序排列的,既然是排过序的,那么相同的节点肯定是挨着的。我们可以使用一个指针cur,每次都要判断是否和他后面的节点值相同,如果相同就把后面的那个节点给删除,这里就以示例2为例来看个视频
视频链接

最后再来看下代码

public ListNode deleteDuplicates(ListNode head) {
    //如果但前节点是空,或者是单个节点,直接返回
    if (head == null || head.next == null)
        return head;
    //只用一个指针cur指向当前节点
    ListNode cur = head;
    while (cur.next != null) {
        //如果当前节点的值和下一个节点的值相同,
        //就把下一个节点值给删除
        if (cur.val == cur.next.val) {
            cur.next = cur.next.next;
        } else {
            //否则cur就往后移一步
            cur = cur.next;
        }
    }
    return head;
}

递归方式解决

除了上面使用一个指针以外,我们还可以使用递归的方式来解决

最后再来看下代码

public ListNode deleteDuplicates(ListNode head) {
    //递归的边界条件判断
    if (head == null || head.next == null)
        return head;
    //递归,相当于从后往前遍历
    head.next = deleteDuplicates(head.next);
    //如果当前节点和下一个一样,直接返回下一个节点,否则
    //返回当前节点
    return head.val == head.next.val ? head.next : head;
}

以上是关于LeetCode 83. 删除排序链表中的重复元素的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode(83)-删除排序链表中的重复元素

[LeetCode]83. 删除排序链表中的重复元素

LeetCode83----删除排序链表中的重复元素

LeetCode-83. 删除排序链表中的重复元素(java)

leetcode 83 删除排序链表中的重复元素

LeetCode Algorithm 83. 删除排序链表中的重复元素