83. 删除排序链表中的重复元素 2019-11-23

题目:

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

示例:

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)

你可能感兴趣的:(83. 删除排序链表中的重复元素 2019-11-23)