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;
    }
  }
posted @ 2021-01-18 09:22  上尤流苏  阅读(108)  评论(0编辑  收藏  举报