20.删除排序链表中的重复元素
83. 删除排序链表中的重复元素
给定一个已排序的链表的头 head
, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
示例 1:

输入:head = [1,1,2] 输出:[1,2]
示例 2:

输入:head = [1,1,2,3,3] 输出:[1,2,3]
提示:
- 链表中节点数目在范围
[0, 300]
内 -100 <= Node.val <= 100
- 题目数据保证链表已经按升序 排列
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode() {} 7 * ListNode(int val) { this.val = val; } 8 * ListNode(int val, ListNode next) { this.val = val; this.next = next; } 9 * } 10 */ 11 class Solution { 12 public ListNode deleteDuplicates(ListNode head) { 13 14 ListNode cur = head; 15 while(cur != null && cur.next != null){ 16 if(cur.val == cur.next.val){ 17 cur.next = cur.next.next; 18 }else{ 19 cur = cur.next; 20 } 21 } 22 return head; 23 } 24 }
法二:递归
1 class Solution { 2 public ListNode deleteDuplicates(ListNode head) { 3 if(head == null || head.next == null){ 4 return head; 5 } 6 head.next = deleteDuplicates(head.next); 7 if(head.val == head.next.val) head = head.next; 8 return head; 9 } 10 }
递归思路详解:https://lyl0724.github.io/2020/01/25/1/