题目:
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例:
image.png
思路:
递归法
终止条件:当head指向链表只剩一个元素的时候,自然是不可能重复的,因此return
返回值:应该返回的自然是已经去重的链表的头节点
每一步要做什么:宏观上考虑,此时head.next已经指向一个去重的链表了,而根据第二步,我应该返回一个去重的链表的头节点。因此这一步应该做的是判断当前的head和head.next是否相等,如果相等则说明重了,返回head.next,否则返回head
作者:chenlele
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/solution/shan-chu-pai-xu-lian-biao-zhong-de-zhong-fu-yuan-2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
//终止条件:当head指向链表只剩一个元素的时候,自然是不可能重复的,因此return
if (head == null || head.next == null) return head;
//遍历每个节点
head.next = deleteDuplicates(head.next);
//返回值:应该返回的自然是已经去重的链表的头节点
//判断当前的head和head.next是否相等,如果相等则说明重了,返回head.next,否则返回head
return head.val == head.next.val ? head.next : head ;
}
}
时间复杂度:O(n),空间复杂度:O(1)