142. 环形链表 II --力扣 --JAVA
题目 解题思路 记录曾经走过的节点,如果再次出现则存在环,否则该链表不存在环。 代码展示 public class Solution { public ListNode detectCycle(ListNode head) { List<ListNode> store = new ArrayList<>(); while (head != null){ if(store.contains(head))...
【数据结构】链表算法总结
知识概览 链表包括单链表和双链表,这里讨论算法题中的链表。为了考虑算法题中对于时间效率的要求,链表通常是用数组模拟成静态链表的形式,速度快。单链表可以用来写邻接表(包括n个链表),邻接表可以存储树和图,最短路问题、最小生成树问题、最大流问题都可以用邻接表来存储。双链表用来优化某些问题。 单链表 题目链接 https://www.acwing.com/problem/content/828/ 代码 #i...
【LeetCode刷题-链表】--23.合并K个升序链表
23.合并K个升序链表 方法:顺序合并 在前面已经知道合并两个升序链表的前提下,用一个变量ans来维护以及合并的链表,第i次循环把第i个链表和ans合并,答案保存到ans中 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * L...
leetcode刷题日记:202. Happy Number( 快乐数)和203. Remove Linked List Elements(移除链表元素)
202. Happy Number( 快乐数) 这一题的解决与之前的循环链表比较类似,因为如果不是快乐数的话,在数字变化的过程中必然遇到了数字变换的循环,所以我们需要在变换的过程中判断是否遇到了循环,判断是否在一个序列中存在循环,我们可以使用与之前在leetcode刷题日记:141. Linked List Cycle(环形链表)类似的思想,让一个数每次变化两次然后一个数每次变化一次,如果存在循环,...
【LeetCode刷题-树】--1367.二叉树中的链表
1367.二叉树中的链表 方法:枚举 枚举二叉树中的每个节点为起点往下的路径是否与链表相匹配的路径,为了判断是否匹配设计了一个递归函数dfs(root,head),其中root表示当前匹配到的二叉树节点,head表示当前匹配到的链表节点,整个函数返回布尔值表示是否有一条该节点往下的路径与head节点开始的链表匹配,如匹配返回true,否则返回false,一共有四种情况 链表已经全部匹配完,匹配成功,...
19. 删除链表的倒数第 N 个结点 --力扣 --JAVA
题目 解题思路 删除链表的倒数第n个节点,需要从链表末尾开始计数;设立私有的全局变量用于统计;因为是单向链表,所以需要通过递归获取需要删除的节点的上一个节点;因为是倒置所以需要在递归后进行计数;创建标志位区分特殊情况,需要删除的节点为首节点则无法获取上一节点;在结果返回时判断是否为首节点。 代码展示 class Solution { private int index = 0; private boo...
【CSDN 每日一练 ★☆☆】【蛮力/双指针】删除排序链表中的重复元素
【CSDN 每日一练 ★☆☆】【蛮力/双指针】删除排序链表中的重复元素 蛮力 双指针 题目 给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数target 。 函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= ...
leetcode刷题日记:160. Intersection of Two Linked Lists(相交链表)
给出两个单链表的头结点headA与headB,让我们找出两个链表相接的起始节点,如果两个链表不存在相交结点返回null。 我们就先假设存在这样两个链表,链表1与链表2,假设链表1的长度为 L 1 L_1 L1和 L 2 L_2 L2,假设对于两个链表,从相交的结点向后数长度为 L 1 , 2 L_{1,2} L1,2,则在相交结点之前链表1的长度未 L 1 − L 1 , 2 L_1-L_{1...
数据结构与算法之美学习笔记:20 | 散列表(下):为什么散列表和链表经常会一起使用?
目录 前言LRU 缓存淘汰算法Redis 有序集合Java LinkedHashMap解答开篇 & 内容小结 前言 本节课程思维导图: 今天,我们就来看看,在这几个问题中,散列表和链表都是如何组合起来使用的,以及为什么散列表和链表会经常放到一块使用。 LRU 缓存淘汰算法 借助散列表,我们可以把 LRU 缓存淘汰算法的时间复杂度降低为 O(1)。现在,我们就来看看它是如何做到的。 首先,我们来回顾一...