LeetCode每日三題(三

news/2024/12/26 5:00:13/

一、環形鏈表

自己答案:

/*** 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) {if(head==null){//鏈表為空直接返回falsereturn false;}int pos=-1;//定義一個集合存放鏈表ArrayList<ListNode> list=new ArrayList<>();list.add(head);//遍歷鏈表存入集合中int count=0;ListNode temp=head.next;while(temp!=null){if(!list.contains(temp)){//不存在於集合中=沒有環//繼續遍歷list.add(temp);count++;temp = temp.next;}else{//存在pos=count;return true;}}//遍歷結束則代表沒有環return false;}
}

標準答案: 

快慢指針:快指針一次走兩個結點  慢指針一次走一個結點 若存在環則兩者遲早相遇

/*** 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) {if(head==null){//鏈表為空直接返回falseint pos=-1;return false;}ListNode fast=head.next;ListNode slow=head;int pos=0;while(fast!=slow){//兩個指針沒有相遇(排除最開始相同的情況)if((fast==null)||(fast.next==null)||(fast.next.next==null)){//爲空結點,無環return false;}else {slow=slow.next;fast=fast.next.next;pos++;}}return true;}
}

二、環形鏈表

自己答案:

/*** 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) {if(head==null){//鏈表為空直接返回falsereturn null;}//定義一個集合存放鏈表ArrayList<ListNode> list=new ArrayList<>();list.add(head);//遍歷鏈表存入集合中int count=0;ListNode temp=head.next;while(temp!=null){if(!list.contains(temp)){//不存在於集合中=沒有環//繼續遍歷list.add(temp);count++;temp = temp.next;}else{//存在return temp;}}//遍歷結束則代表沒有環return null;}
}

標準答案:

/*** 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) {if(head==null){//鏈表為空直接返回falsereturn null;}ListNode fast=head;ListNode slow=head;while(fast!=null){slow=slow.next;if(fast.next==null){return null;}else{fast=fast.next.next;}if(fast==slow){ListNode temp=head;while(temp!=slow){temp=temp.next;slow=slow.next;}return slow;}}return null;}
}

 三、合并兩個有序鏈表

自己答案:

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {if(list2==null&&list1!=null){return list1;}else if(list1==null&&list2!=null){return list2;}else if(list1==null&&list2==null)return null;//合并有序鏈表//分別定義兩個指針ListNode pA=list1;ListNode pB=list2;ListNode result=new ListNode(-1);ListNode temp=result;while(pA!=null&&pB!=null){if(pA.val <= pB.val) {//pA比pB小temp.next = pA;temp = temp.next;pA = pA.next;}else{temp.next = pB;temp = temp.next;pB = pB.next;}}if(pA==null){temp.next=pB;}else temp.next=pA;temp=result.next;return temp;}
}

標準答案:

递归:

class Solution {public ListNode mergeTwoLists(ListNode l1, ListNode l2) {if (l1 == null) {return l2;} else if (l2 == null) {return l1;} else if (l1.val < l2.val) {l1.next = mergeTwoLists(l1.next, l2);return l1;} else {l2.next = mergeTwoLists(l1, l2.next);return l2;}}
}


http://www.ppmy.cn/news/1558181.html

相关文章

【ARM】MDK-编译时Linker Error:Internal fault

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 记录问题ARMCLANG: Linker Error: Internal fault: [0xb3b91b:6120001]的解决方案&#xff0c;以及添加原厂对于该问题的说明链接&#xff0c;为同事解决该问题提供参考。 2、 问题场景 客户在编译时linking中出现…

Go语言注释规范

Go语言注释规范 1.注释规范包注释文件注释结构体注释和接口注释函数和方法的注释代码逻辑注释 2.Goland注释相关配置包注释和文件注释配置Goanno插件 1.注释规范 包注释 包注释是对包的介绍&#xff0c;每个包都至少有一个包注释&#xff0c;在同一个包下&#xff0c;任一一个…

【文档搜索引擎】缓冲区优化和索引模块小结

开机之后&#xff0c;首次制作索引会非常慢&#xff0c;但后面就会快了 重启机器&#xff0c;第一次制作又会非常慢 这是为什么呢&#xff1f; 在 parserContent 里面&#xff0c;我们进行了一个读文件的操作 计算机读取文件&#xff0c;是一个开销比较大的操作&#xff0c; …

独一无二,万字详谈——Linux之文件管理

Linux文件部分的学习&#xff0c;有这一篇的博客足矣! 目录 一、文件的命名规则 1、可以使用哪些字符&#xff1f; 2、文件名的长度 3、Linux文件名的大小写 4、Linux文件扩展名 二、文件管理命令 1、目录的创建/删除 &#xff08;1&#xff09;、目录的创建 ① mkdir…

CCF算法学习-1

1. B - Piano 问题描述 有一个无限长的钢琴键盘。是否存在一个连续的片段&#xff0c;其中包含 W 个白键和 B 个黑键&#xff1f; 设 S 为通过无限重复字符串 wbwbwwbwbwbw 形成的字符串。 是否存在 S 的一个子字符串&#xff0c;其中包含 W 个 w&#xff08;白键&#xff09…

新手SEO指南如何入门与实操技巧分析

内容概要 在数字化时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已成为网站流量获取的重要手段。针对新手&#xff0c;理解SEO的基础是入门的第一步。本文将从多个方面为新手提供系统性的知识&#xff0c;帮助他们掌握SEO的核心概念和实用技巧。 首先&#xff0c…

MongoDB教程002:文档(表)的增删改查

文章目录 1.4 文档基本CRUD1.4.1 文档的插入1.4.1.1 单个文档的插入1.4.1.2 批量插入 1.4.2 文档的基本查询1.4.3 文档的更新1.4.4 删除文档 1.4 文档基本CRUD 文档&#xff08;document&#xff09;的数据结构和JSON基本一样。 所有存储在集合中的数据都是BSON格式。 1.4.1…

【深入理解网络协议】

深入理解网络协议 一、基础模型 OSI模型 OSI模型是国际标准化组织&#xff08;ISO&#xff09;提出的一个参考模型&#xff0c;它将网络通信过程划分为7个层次&#xff0c;每一层都有特定的功能和责任。 [!TIP] 说明 层次&#xff1a; 物理层&#xff1a;负责传输原始比特流…