删除排序链表中的重复元素
难度 简单
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 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;
}
}