leetcode算法题解(Java版)-7-循环链表
一、循环链表
题目描述
Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
思路
- 不能用多余空间,刚开始没有考虑多个指针什么,一下子想到个歪点子:循环就是重复走,那我可以标记一下每次走过的路,如果遇到标记过的路,那说明就是有回路了。
代码一
/**
* 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){
return false;
}
ListNode p=new ListNode(0);
p=head;
int u=-987123;
while(p.val!=u&&p.next!=null){
p.val=u;
p=p.next;
}
if(p.val==u){
return true;
}
else{
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){
return false;
}
ListNode p=head;
ListNode q=head.next;
while(p!=q&&q!=null&&p!=null){
q=q.next;
if(q!=null){
q=q.next;
}
p=p.next;
}
if(p==q&&p!=null){
return true;
}
else{
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){
return false;
}
ListNode fastNode=head;
ListNode lowNode=head;
while(fastNode!=null&&fastNode.next!=null){
fastNode=fastNode.next.next;
lowNode=lowNode.next;
if(fastNode==lowNode){
return true;
}
}
return false;
}
}
今天有场考试,到七点半才结束,就刷这么多了。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
leetcode算法题解(Java版)-6-链表,字符串
一、字符串处理 题目描述 Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. 思路 把数字转化为罗马符号,根据罗马符号的规律,可以先用map来存储一下。之后把每一位添加到所求中去。 语法点:StringBuffer是字符缓冲区,是可以修改字符长度的,最后要用sb.toString()去返回缓冲区的字符串 代码 //!COPY public class Solution { public String intToRoman(int num) { String[][] map={ {"","I","II","III","IV","V","VI","VII","VIII","IX"}, {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"}, {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"}, {"","M","MM","MMM"...
-
下一篇
PrestaShop 1.7 订单生成后下载服务器出现 505 的错误
PrestaShop 生成订单后下载,服务器上有 505 的错误。 经查看应该是服务器上的错误:Allowed memory size of 134217728 bytes exhausted (tried to allocate 72 bytes) 在默认情况下 PHP 的内存限制为 128MB,根据这个情况有可能你需要修改 php.ini 文件增加 PHP 内存的大小。 修改配置文件里面的memory_limit 的配置到 256 MB 可以避免这个问题。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- 2048小游戏-低调大师作品
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音