当前位置: 首页 > news >正文

7月10日学习打卡,环形链表+栈OJ

前言

大家好呀,本博客目的在于记录暑假学习打卡,后续会整理成一个专栏,主要打算在暑假学习完数据结构,因此会发一些相关的数据结构实现的博客和一些刷的题,个人学习使用,也希望大家多多支持,有不足之处也请指出,谢谢大家。

一,力扣141,判断环形链表

. - 力扣(LeetCode)

我们运用快慢指针解决这个问题,如过链表成环,那么定义一个一次走两步的快指针和一次走一步的慢指针必定相遇,因此得解

/*** Definition for singly-linked list.* class ListNode {*     int val;*     ListNode next;*     ListNode(int x) {*         val = x;*         next = null;*     }* }*/
public class Solution {public boolean hasCycle(ListNode head) {ListNode fast=head;ListNode slow=head;while(fast!=null&&fast.next!=null){fast=fast.next.next;slow=slow.next;if(fast==slow){return true;}}return false;}
}

二,力扣142,环形链表相遇节点

. - 力扣(LeetCode)

分析:上面我们已经知道求快慢指针相遇在环形内的节点的方法,通过数学分析,可以得到当快慢指针相遇时,头节点到入口点得距离等于相遇节点到入口点距离(注意当链长但环小则不适用)下图表示为x==y,因此此时让两个指针分别在头节点和相遇节点以相同速度走,再次相遇则是入口点

/*** Definition for singly-linked list.* class ListNode {*     int val;*     ListNode next;*     ListNode(int x) {*         val = x;*         next = null;*     }* }*/
public class Solution {public ListNode detectCycle(ListNode head) {ListNode fast=head;ListNode slow=head;while(fast!=null&&fast.next!=null){fast=fast.next.next;slow=slow.next;if(fast==slow){break;}}slow=head;if(fast==null||fast.next==null)return null;while(fast!=slow){slow=slow.next;fast=fast.next;}return fast;}}

三,力扣20,有效括号

. - 力扣(LeetCode)

分析:这题需要用到栈的知识,思路为遇到左括号则入栈,否则,获取一个栈顶元素看是否匹配,如果栈空但遇到右括号或者走到最后栈也不为空则返回false,非常简单

class Solution {public boolean isValid(String s) {Stack<Character> st = new Stack();for (int i = 0; i < s.length(); i++) {char ch = s.charAt(i);if (ch == '(' || ch == '[' || ch == '{') {st.push(ch);} else {if (st.empty()) {return false;}char ch2 =st.peek();if (ch2 == '(' && ch == ')' || ch2 == '[' &&ch == ']' || ch2 == '{' && ch == '}') {st.pop();}else{return false;}}}if(!st.empty())return false;return true;}
}

四,牛客JZ31,栈的压入,弹出

栈的压入、弹出序列_牛客题霸_牛客网

思路:压入数据依次入栈,如果栈顶元素于压出元素相同,则把这个元素出栈,最后如果栈为空则返回true否则返回false

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param pushV int整型一维数组 * @param popV int整型一维数组 * @return bool布尔型*/public boolean IsPopOrder (int[] pushV, int[] popV) {Stack<Integer> st=new Stack<Integer>();int j=0;for(int i=0;i<pushV.length;i++){st.push(pushV[i]);while(!st.empty()&&j<popV.length&&st.peek()==popV[j]){j++;st.pop();}}if(st.empty()){return true;}return false;}}

好了,本期博客就到这里,谢谢大家。

http://www.lryc.cn/news/396805.html

相关文章:

  • 鸿蒙语言基础类库:【@ohos.util.TreeSet (非线性容器TreeSet)】
  • freemarker生成pdf,同时pdf插入页脚,以及数据量大时批量处理
  • 勇攀新高峰|暴雨信息召开2024年中述职工作会议
  • C++:filter2D函数简要概述
  • Postman使用教程【项目实战】
  • 微软Phi-3:小型而强大的AI模型解析与实战指南
  • Python 获取 SQL 指纹和 HASH 值
  • 基于OpenCv的快速图片颜色交换,轻松实现图片背景更换
  • 在Linux下直接修改磁盘镜像文件的内容
  • ASP.NET Core----基础学习03----开发者异常页面 MVC工作原理及实现
  • jvm 07 GC算法,内存池,对象内存分配
  • ComfyUI入门教程
  • Flutter TabBar与TabBarView联动及获取当前点击栏目索引
  • 【区块链+跨境服务】跨境出口电商溯源 | FISCO BCOS应用案例
  • 记录一次mysql死锁问题的分析排查
  • 【UE5.1 角色练习】16-枪械射击——瞄准
  • 04OLED简介和调试方法
  • “LNMP环境搭建实战指南:从零开始配置CentOS 7下的Nginx、MySQL与PHP“
  • 院内导航:如何用科技破解就医找路难题
  • C++基础篇(1)
  • 云视频监控中的高效视频转码策略:视频汇聚EasyCVR平台H.265自动转码H.264能力解析
  • xcode配置swift使用自定义主题颜色或者使用RGB或者HEX颜色
  • 相同含义但不同类型字段作为join条件时注意事项
  • 数据结构(3.8)——栈的应用
  • 前端面试题35(在iOS和Android平台上,实现WebSocket协议有哪些常见的库或框架?)
  • Mysql如何高效ALTER TABL
  • vue3+vite搭建第一个cesium项目详细步骤及环境配置(附源码)
  • LiteOS增加执行自定义源码
  • 《Nature》文章:ChatGPT帮助我学术写作的三种方式
  • 防火墙安全策略与用户认证综合实验