[LeetCode题解]83. 删除排序链表中的重复元素 | 递归 + 迭代
方法一:递归
解题思路
通过递归法,每次判断目前头节点与给定的节点是否相等。如是,继续判断下一个节点,否则保存当前头节点,设置 next 指向下次递归得到的节点,然后返回当前节点。
代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode DeleteDuplicates(ListNode head) {
        // 递归
        if(head == null) {
            return head;
        }
        return DeleteDuplicatesRecursion(head, null);
    }
    public ListNode DeleteDuplicatesRecursion(ListNode head, ListNode node) {
        if(head == null) {
            return head;
        }
        if(node == null || head.val != node.val) {
            head.next = DeleteDuplicatesRecursion(head.next, head);
            return head;
        } else {
            return DeleteDuplicatesRecursion(head.next, head);
        }
    }
}
复杂度分析
- 时间复杂度:\(O(n)\),其中 \(n\) 是链表的长度。
- 空间复杂度:\(O(n)\)。一共调用了 \(n\) 次递归,需要额外 \(O(n)\) 的空间。
方法二:迭代
解题思路
通过迭代,判断后一个节点与当前节点是否相同。如是,则“跳过”(删除)此节点。否则,移到下一节点进行判断。
代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode DeleteDuplicates(ListNode head) {
        ListNode cur = head;
        while (cur != null && cur.next != null) {
            if (cur.next.val == cur.val) {
                cur.next = cur.next.next;
            } else {
                cur = cur.next;
            }
        }
        return head;
    }
}
复杂度分析
- 时间复杂度:\(O(n)\),其中 \(n\) 是链表的长度。因为链表中的每个节点都检查一次以确定它是否重复。
- 空间复杂度:\(O(1)\)。
[LeetCode题解]83. 删除排序链表中的重复元素 | 递归 + 迭代的更多相关文章
- LeetCode【83. 删除排序链表中的重复元素】
		我最开始的程序是 但是结果 
- Java实现 LeetCode 83 删除排序链表中的重复元素
		83. 删除排序链表中的重复元素 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1-> ... 
- leetcode 83. 删除排序链表中的重复元素 及 82. 删除排序链表中的重复元素 II
		83. 删除排序链表中的重复元素 问题描述 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: ... 
- LeetCode - 82、删除排序链表中的重复元素 II
		给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4->4->5 输出: 1 ... 
- leetcode刷题-83删除排序链表中的重复元素
		题目 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 实现 # Definition for singly-li ... 
- LeetCode 83 —— 删除排序链表中的重复元素
		1. 题目 2. 解答 从前向后遍历链表,如果下一个结点的值和当前结点的值相同,则删除下一个结点,否则继续向后遍历. /** * Definition for singly-linked list. ... 
- leetcode 83删除排序链表中的重复元素
		/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ... 
- LeetCode 82. 删除排序链表中的重复元素 II(Remove Duplicates from Sorted List II)
		82. 删除排序链表中的重复元素 II 82. Remove Duplicates from Sorted List II 题目描述 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有 ... 
- [LeetCode] 82. 删除排序链表中的重复元素 II
		题目链接 : https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/ 题目描述: 给定一个排序链表,删除所有含有 ... 
随机推荐
- canal 配置 多个监听 推送到不同mq
			canal整合rabbitmq 见上篇 如果想监听不同库 不同表到不同队列如何操作 1. vim canal.properties canal.destinations = route1,route ... 
- spring boot:用redis+lua限制短信验证码的发送频率(spring boot 2.3.2)
			一,为什么要限制短信验证码的发送频率? 1,短信验证码每条短信都有成本制约, 肯定不能被刷接口的乱发 而且接口被刷会影响到用户的体验, 影响服务端的正常访问, 所以既使有图形验证码等的保护, 我们仍然 ... 
- 通透,23 个问题 TCP 疑难杂症全解析
			每个时代,都不会亏待会学习的人. 在进入今天主题之前我先抛几个问题,这篇文章一共提出 23 个问题. TCP 握手一定是三次?TCP 挥手一定是四次? 为什么要有快速重传,超时重传不够用?为什么要有 ... 
- Cisco思科模拟器交换机划分VLAN 入门详解 - 精简归纳
			Cisco思科模拟器交换机划分VLAN 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 10 / 24 转载请注明出处!️ 附: 交流方式: ️ ️ ️ QQ: 1846334075 We ... 
- VB  错误日志:MSForms.CommandButton 不是一个已加载的控件类等解决方法
			是由于缺少了fm20.dll这个必要组件 网上找到 然后在工程中引用 找到路径 完美解决 
- python爬虫 学习1
			1 import requests 2 from bs4 import BeautifulSoup 3 import bs4 4 def gethtmltext(url): #获取html内容,利用t ... 
- 基于PHP实现短信验证码接口的方法
			步骤: 1.登录荣联运通讯注册获取ACCOUNT SID.AUTH TOKEN.Rest URL(生产).AppID(默认): 2.注册测试用手机号码(先注册测试号码方可使用): 3.下载demo示例 ... 
- 【API进阶之路】API带来的微创新,打动投资人鼓励我创业
			摘要:怎么帮助创作者提高视频的推荐量呢?我发现了:视频的封面图非常重要. 上回说到,老板一拍脑门,交代了一个新项目:小成本开发一款短视频剪辑工具([<[API进阶之路]人少钱少需求多的新项目该怎 ... 
- 对于RBAC与shiro的一些思考
			一.什么是RBAC模型 RBAC模型是一个解决用户权限问题的设计思维. 在最简单的RBAC模型中,将用户表设计为如下几个表 1.用户 2.角色 3.权限 以及这三张表衍生出来的两张中间表 4.用户_角 ... 
- 记EF的一个基本访问类
			代码: 1 using EFModel; 2 using System; 3 using System.Collections.Generic; 4 using System.Data.Entity; ... 
