LeetCode每日练习之链表常见题目

2023-09-18 17:14:55

1. 两个链表的第一个公共节点

输入两个链表,找出它们的第一个公共节点。

1.1 思路

  1. 哈希和集合,先将一个链表全部存到Map里,然后一边遍历第二个链表,一边检测Hash是否存在当前结点,如果有交点,那么一定能检测出来,
  2. 使用两个栈,分别将两个链表入栈,然后分别出栈对比,如果相等就出栈,知道找到最晚出栈的那组,
  3. 拼接两个字符串,将两个字符串AB,拼接成AB和BA,拼接后可以发现规律,最后一部分一样,那么第一个相等的结点就是交点。
  4. 差和双指针问题,先统计两个链表的长度,求出两个长度的差,让长的先走k步,然后两个指针同时走,第一个相等的结点就是两个的交点。

1.2 代码

class Solution {
    ListNode getIntersectionNode(ListNode headA, ListNode headB) {
       //差和双指针
       if(headA == null || headB == null){
            return null;
       }
       //1.先计算两个链表的长度
       ListNode node1 = headA;
       ListNode node2 = headB;
       int l1=0,l2=0;
       while(node1 != null){
           node1 = node1.next;
           l1++;
       } 
       while(node2 != null){
           node2 = node2.next;
           l2++;
       }
       int sub = l1>l2?l1-l2:l2-l1;
       //2.长的先走k步
       ListNode cur1 = headA;
       ListNode cur2 = headB;
       if(l1 > l2){
           while(sub != 0){
               cur1 = cur1.next;
               sub--;
           }
       }
       if(l1 < l2){
           while(sub != 0){
               cur2 = cur2.next;
               sub--;
           }
       }
        //两个指针一起走,值相同的时候代表有交点
        while(cur1 != cur2){
            cur1 = cur1.next;
            cur2 = cur2.next;
        }
        return cur1;
    }
}

 2. 回文链表

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

2.1 思路

将链表存入到栈中,然后一边遍历,一边出栈比较,如果出现不相等则返回false,否则返回true。

2.2 代码

class Solution {
    public boolean isPalindrome(ListNode head) {
        //压入栈中,一遍遍历一边出栈,只要有一个不相等就返回false
        ListNode node1 = head;
        Stack<Integer> stack = new Stack<>();
        while(node1 != null){
            stack.push(node1.val);
            node1 = node1.next;
        }
        ListNode node2 = head;
        while(node2 != null){
            if(node2.val != stack.pop()){
                return false;
            }
            node2 = node2.next;
        }
        return true;
    }
}

更多推荐

注意力机制代码

注意力机制(AttentionMechanism)是深度学习中常用的一种技术,用于在处理序列数据时聚焦于不同部分的信息。以下是一个简单的注意力机制示例代码,使用Python和PyTorch库实现。这个示例是一个自定义的注意力机制,可以用于文本序列的处理,例如机器翻译。首先,确保你已经安装了PyTorch库。然后,可以使

Python 实现 PDF 文件转换为图片 / PaddleOCR

文章用于学习记录文章目录前言一、PDF文件转换为图片二、OCR图片文字识别提取三、服务器端下载运行PaddleOCR四、下载权重文件总结前言文字识别(OpticalCharacterRecognition,简称OCR)是指将图片、扫描件或PDF、OFD文档中的打印字符进行检测识别成可编辑的文本格式。一、PDF文件转换为

解决tomcat中文乱码问题终极大招

前言乱码问题是所有开发人员一定会遇到的问题,可惜的是,讲乱码解决方案的人往往讲不到重点。我们都知道引起乱码的原因就是编码不一样导致的。所以我们的终极解决方案就是让程序里的编码和tomcat的编码一致就行。由此引出了我们的第一个问题,tomcat控制台的编码是多少?tomcat控制台的编码是多少?这个问题很多人都会让你去

[2023.09.15]: Yew SSR模式下的条件编译问题

昨天才写了Rust的条件编译,没想到这个问题还没完。昨天我还为它的强大而赞叹不已,自以为对它了解了八九成,然而今天我才猛然意识到,这个里面的深度远超我的想象。我估计,我现在只了解其中的冰山一角吧。故事从客户端post数据的后端api说起。习以为常的思维影响着我解决问题的方式,对于这种问题,我通常会寻找一个库来处理后端的

(入门向)面向萌新的算法比赛入门指南

什么是算法算法是指解决问题或完成特定任务的一系列明确指令或步骤集合。它是一个定义良好、逐步执行的操作序列,用于将输入转换为输出。算法可用于计算、数据处理、自动化控制、问题解决等各个领域。算法通常由一系列简单的操作组成,这些操作可以是基本的数学运算、逻辑判断、条件分支、循环控制等。通过组合和重复执行这些操作,算法能够解决

大模型从入门到应用——LangChain:代理(Agents)-[工具包(Toolkit)]

分类目录:《大模型从入门到应用》总目录LangChain系列文章:基础知识快速入门安装与环境配置链(Chains)、代理(Agent:)和记忆(Memory)快速开发聊天模型模型(Models)基础知识大型语言模型(LLMs)基础知识LLM的异步API、自定义LLM包装器、虚假LLM和人类输入LLM(HumanInpu

数据结构——红黑树

1.什么是红黑树?红黑树是一种特定类型的二叉树,用于组织数据。它是一种平衡二叉查找树(AVL树)的变体,每个结点都带有颜色属性(红色或黑色)。在红黑树中,从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。具体来说,红黑树满足以下性质:每个结点要么是红色,要么是黑色。根结点是黑色。每个叶结点(NIL或空结点)是黑色

PHP8的类与对象的基本操作之类的实例化-PHP8知识详解

定义完类和方法后,并不是真正创建一个对象。类和对象可以描述为如下关系。类用来描述具有相同数据结构和特征的“一组对象”,“类”是“对象”的抽象,而“对象”是“类”的具体实例,即一个类中的对象具有相同的“型”,但其中每个对象却具有各不相同的“值”。例如,人就是一个抽象概念,即人类,但是程序员小张就是人类中具体的一个实例,即

TSINGSEE视频AI智能分析技术:水泥厂安全生产智能监管解决方案

一、方案背景随着人工智能技术的快速发展以及视频监控系统在全国范围内的迅速推进,基于AI视频智能分析技术的智能视频监控与智慧监管系统,也已经成为当前行业的发展趋势。在工业制造与工业生产领域,工厂对设备的巡检管理、维护维修、资产管理、安全运行管理等方面也提出了更高的监管要求。二、方案介绍TSINGSEE青犀视频围绕AI算法

网络安全(黑客)自学笔记

前言作为一个合格的网络安全工程师,应该做到攻守兼备,毕竟知己知彼,才能百战百胜。计算机各领域的知识水平决定你渗透水平的上限。【1】比如:你编程水平高,那你在代码审计的时候就会比别人强,写出的漏洞利用工具就会比别人的好用;【2】比如:你数据库知识水平高,那你在进行SQL注入攻击的时候,你就可以写出更多更好的SQL注入语句

【算法】算法设计与分析 课程笔记 第一章 概述

第一章算法概述算法的性质算法的四个性质:输入、输出、确定性和有穷性。算法的时间复杂度1.常见的时间复杂度常数阶O(1)对数阶O(logn)线性阶O(n)线性对数阶O(nlogn)平方阶O(n^2)立方阶O(n^3)k次方阶O(n^k)指数阶O(2^n)注:上面的logn均代表以2为底的对数。2.时间复杂度排序常见的算法

热文推荐