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;
}
}
今天有場考試,到七點半才結束,就刷這麼多了。
相關文章
- LeetCode 連結串列解題彙總 Java版LeetCodeJava
- 連結串列-迴圈連結串列
- 連結串列4: 迴圈連結串列
- 迴圈連結串列
- leetcode 234.迴文連結串列 JavaLeetCodeJava
- 單向迴圈連結串列
- 單鏈迴圈連結串列(初版
- LeetCode 234. 迴文連結串列LeetCode
- LeetCode連結串列專題LeetCode
- 資料結構之迴圈連結串列資料結構
- 單向迴圈連結串列大綱
- 迴圈連結串列(約瑟夫問題)--python實現Python
- 【LeetCode-連結串列】面試題-反轉連結串列LeetCode面試題
- 【資料結構與演算法學習】線性表(順序表、單連結串列、雙向連結串列、迴圈連結串列)資料結構演算法
- 單向迴圈連結串列的介面程式
- 單向迴圈連結串列的實現
- 【LeetCode】初級演算法:連結串列LeetCode演算法
- leetcode題目解析(js)--連結串列LeetCodeJS
- LeetCode題解(Offer24):反轉連結串列(Python)LeetCodePython
- 設計單向迴圈連結串列的介面
- 【LeetCode】->連結串列->通向連結串列自由之路LeetCode
- Leetcode_86_分割連結串列_連結串列LeetCode
- 7-迴圈語句
- #反轉連結串列_C++版 #反轉連結串列_Java版 @FDDLCC++Java
- 2024/12/1 【連結串列】 LeetCode 面試題 02.07. 連結串列相交LeetCode面試題
- JS資料結構第三篇---雙向連結串列和迴圈連結串列之約瑟夫問題JS資料結構
- LeetCode-Python-86. 分隔連結串列(連結串列)LeetCodePython
- LeetCode-連結串列LeetCode
- 【LeetCode連結串列#9】圖解:兩兩交換連結串列節點LeetCode圖解
- Java版-資料結構-連結串列Java資料結構
- 雙向迴圈連結串列的介面設計(初版
- 迴文連結串列
- 資料結構與演算法(二) -- 線性表之單向迴圈連結串列資料結構演算法
- 雙向迴圈連結串列————遍歷、查詢、插入結點
- 單向迴圈連結串列——查詢、刪除、插入結點
- 連結串列(LinkedList)解題總結
- LeetCode 第 86 號問題:分割連結串列LeetCode
- LeetCode 上最難的連結串列演算法題,沒有之一!LeetCode演算法