leetcode刷题-83删除排序链表中的重复元素

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

leetcode83-删除排序链表中的重复元素

前文

本文为菜鸟的刷题记录,仅用作笔记使用,并非最佳解决方案。

题目信息

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。

返回同样按升序排列的结果链表。

输入: head = [1,1,2,3,3]
输出: [1,2,3]
复制代码

解题思路分析

解法1

本方法主要是采用递归的思路进行处理。由于是排序链表,那么实际意义上只需要比较连续节点元素的值是否相等即可。因此采用递归的思路进行操作。遍历是如果遇到空节点,证明链表已经遍历结束,直接返回即可。如果节点下一节点为空,也认为链表结束,直接返回即可。如果下一节点不为空,则当前节点数值与下一节点数值进行比较。如果二者不相等,则不需要进行任何操作。如果二者数值相等,则将当前节点的下一节点设置为下一节点原本的下一节点,移除下一节点本身即可。这样就达到了重复元素删除的目的。以此方式递归就可以删除所有的链表重复元素。 代码如下:

public ListNode deleteDuplicates(ListNode head) {
    if(head == null){
        return null;
    }
    if(head.next != null){
        deleteDuplicates(head.next);
        if(head.val == head.next.val){
            head.next = head.next.next;
        }
        return head;
    }else{
        return head;
    }
}
复制代码

复杂度分析

  • 时间复杂度 o(n)
  • 空间复杂度 o(1)

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。

猜你喜欢

转载自juejin.im/post/7016898026182705159