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


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

    难度  简单 

    给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

    示例 1:

    输入: 1->1->2
    输出: 1->2
    

    示例 2:

    输入: 1->1->2->3->3
    输出: 1->2->3

    示例 3:

    输入: 1->1->1
    输出: 1

     

    思路

    1、凡是链表和二叉树,都可以考虑使用递归解决

    2、递归的思想

        ①、整个递归的终止条件。

        ②、一级递归需要做什么?

        ③、应该返回给上一级的返回值是什么?

     

    解题

    public static ListNode deleteDuplicates(ListNode head) {
        if (head == null || head.next == null) {
          return head;
        }
        head.next = deleteDuplicates(head.next);
        if (head.val == head.next.val) {
          head.next = head.next.next;
        }
        return head;
      }

    执行结果

    测试用例

    public static void main(String[] args) {
    
        /** 示例1 输入: 1->1->2 输出: 1->2 */
        ListNode head = new ListNode(1);
        ListNode node1 = new ListNode(1);
        ListNode node2 = new ListNode(2);
        head.next = node1;
        node1.next = node2;
        node2.next = null;
    
        System.out.println("示例一");
        while (deleteDuplicates(head) != null) {
          System.out.println(head.val);
          head = head.next;
        }
    
    
        /** 示例2 输入: 1->1->2->3->3 输出: 1->2->3 */
        ListNode head2 = new ListNode(1);
        ListNode node21 = new ListNode(1);
        ListNode node22 = new ListNode(2);
        ListNode node23 = new ListNode(3);
        ListNode node24 = new ListNode(3);
        head2.next = node21;
        node21.next = node22;
        node22.next = node23;
        node23.next = node24;
        node24.next = null;
    
        System.out.println("示例二");
        while (deleteDuplicates(head2) != null) {
          System.out.println(head2.val);
          head2 = head2.next;
        }
    
    
        /** 示例3 输入: 1->1->1 输出: 1 */
        ListNode head3 = new ListNode(1);
        ListNode node31 = new ListNode(1);
        ListNode node32 = new ListNode(1);
        head3.next = node31;
        node31.next = node32;
        node32.next = null;
    
        System.out.println("示例三");
        while (deleteDuplicates(head3) != null) {
          System.out.println(head3.val);
          head3 = head3.next;
        }
      }
    纸上得来终觉浅 绝知此事要躬行
  • 相关阅读:
    【Linux 读书笔记】Linux文件的硬连接和符号连接
    Shell参数
    Shellcase语句的例子
    Shellselect
    Shell小程序一个
    SHELL起步
    接昨天的 while
    Shell循环控制
    Shellwhile循环的例子
    Shellfor语句
  • 原文地址:https://www.cnblogs.com/renyuanwei/p/14291205.html
Copyright © 2020-2023  润新知