zoukankan      html  css  js  c++  java
  • 83. 删除排序链表中的重复元素【简单】

    leetcode:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/

    方法一:

    迭代遍历

    遍历链表,下一个节点与当前节点进行比较,如果相同,则删除下一个节点,否则继续循环下一个节点

    /**
     * Definition for singly-linked list.
     * function ListNode(val, next) {
     *     this.val = (val===undefined ? 0 : val)
     *     this.next = (next===undefined ? null : next)
     * }
     */
    /**
     * @param {ListNode} head
     * @return {ListNode}
     */
    var deleteDuplicates = function(head) {
        if (!head || !head.next) return head;
        let temp = head;
        // 遍历,与前一个节点数字相同的删除
        while (temp && temp.next) {
            const next = temp.next;
            if (next.val === temp.val) {
                // 与前一个节点数字相同
                temp.next = next.next;
            } else {
                // 与前一个节点数字不同
                temp = next;
            }
        }
        return head;
    };

    方法二:

    递归

    递归函数含义:返回去重的链表

    边界:节点不存在 或者 节点只有一个 返回当前节点

    操作:

    1、当前节点与下一个节点数字相同,舍弃当前节点,对剩下节点递归处理,并将递归结果返回

    2、当前节点与下一个节点数字不同,保留并返回当前节点,对剩下节点递归处理,并将递归结果作为当前节点的下一个节点

    /**
     * Definition for singly-linked list.
     * function ListNode(val, next) {
     *     this.val = (val===undefined ? 0 : val)
     *     this.next = (next===undefined ? null : next)
     * }
     */
    /**
     * @param {ListNode} head
     * @return {ListNode}
     */
    var deleteDuplicates = function(head) {
        // 递归边界
        if (!head || !head.next) return head;
        // 当前节点与下一个节点数字相同,则舍弃当前节点,直到最后只保留相同数字节点的最后一个
        if (head.next.val != head.val) {
            // 当前节点与下一个节点数字不同,当前节点不用舍弃,继续对剩下链表递归处理
            head.next = deleteDuplicates(head.next);
        } else {
            // 当前节点与下一个节点数字相同,舍弃当前节点,直接返回剩下列表递归的结果
            return deleteDuplicates(head.next);
        }
        // 当前节点与下一个节点数字不同的链表结果返回
        return head;
    };

    -----smile

  • 相关阅读:
    log4net preserveLogFileNameExtension 和 watch
    BootStrap自带的图标
    git fetch批处理,遍历一个文件夹下的所有子目录,执行git fetch --all
    Recommended Settings for Tracing and Message Logging
    蜗牛—JSONJ学习ava转变
    Do you master on array in C ?
    全面推行使用智能指针的权利
    2014/08/23——OJ出现waiting...
    在Windows通过使用MinGW静态编译Assimp
    Ubuntu12.04password正确 入口的桌面(测试的恢复正常)
  • 原文地址:https://www.cnblogs.com/Walker-lyl/p/14581100.html
Copyright © 2011-2022 走看看