日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

LeetCode 141. 环形链表 简单难度

發布時間:2025/5/22 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 141. 环形链表 简单难度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

**

141. 環形鏈表

**
給定一個鏈表,判斷鏈表中是否有環。

如果鏈表中存在環,則返回 true 。 否則,返回 false 。

解題思路(兩種方法):
方法一
用集合set以及set.find()方法。
**步驟一:**遍歷鏈表時用find方法判斷節點是否在set里,如果在就停止,并且這個節點就是環形的起點。
**步驟二:**如果不在,把節點插入到set里。

這個方法簡單,但是空間復雜度并不是O(1),會浪費額外的空間。

接下來看看
方法二:用快慢指針遍歷指針(這個方法的原理就跟我們跑步一樣,如果是環形,就是跑操場,快的人總會繞過一圈追到慢的人;而如果是直線跑,那么快的人跟慢的人距離只會越拉越大)

步驟一:建立快慢指針指向鏈表表頭
步驟二:判斷指針目前的節點和指向的下個節點的值是否為null,如果不為空,就讓快指針走兩步。滿指針走一步。
步驟三:判斷快指針和滿指針是否相等,如果相等就是存在環形。如果不等就繼續回步驟二;

這個方法就是省空間,只要兩個指針就搞定了??臻g復雜度是O(1);
方法一:代碼很簡單,就不寫了。
方法二:代碼如下:

class Solution { public:bool 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;} };

問題:如果是要返回環形的起點,那么我們應該改快慢指針呢?
我們來試跑一下吧

總結

以上是生活随笔為你收集整理的LeetCode 141. 环形链表 简单难度的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。