日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 142 环形链表 II

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 142 环形链表 II 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 題目描述
  • 給定一個鏈表,返回鏈表開始入環的第一個節點。 如果鏈表無環,則返回 null。為了表示給定鏈表中的環,我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開 始)。 如果 pos 是 -1,則在該鏈表中沒有環。注意,pos 僅僅是用于標識環的情況,并不會作 為參數傳遞到函數中。
  • 題解
  • 1)可以用map存儲指針,如果其已經出現過,則為入環第一個節點。 2)關于判斷鏈表是否有環,使用快慢指針即可,看其是否會相遇 關于找到環的入口,假設鏈表頭部至環入口的長度為a,入口至相遇點的長度為x,環的大小 為b,則慢指針走的步數為a+x(前面已經說明過為什么在第一次進入環內就相遇),快指針 走的步數為a+x+kb,其之間的關系為2(a+x)=a+x+kb,變換一下可得a=(k-1)b+b-x,也就是 說,鏈表頭部至環入口的長度=環長度的整數倍+相遇處與入口之間的距離,我們在此時讓一 個指針從鏈表頭部和慢指針一起進行移動,當它們倆相遇時就是我們要找的入口處。假設 k=2,那么新指針走了a步之后到達環入口處,慢指針走了a=b+b-x步也到達環的入口處,其實 就等同于慢指針繞環k-1圈以及b-x步剛好也走到環的入口處。
  • 代碼
  • 141. 環形鏈表/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:bool hasCycle(ListNode *head) {ListNode* l=head,*f=head;while (f&&f->next){l=l->next;f=f->next->next;if (l==f) return true;}return false;} }; 142. 環形鏈表 II/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode *detectCycle(ListNode *head) {ListNode* l=head,*f=head,*p=head;while (f&&f->next){l=l->next;f=f->next->next;if (l==f){while (l!=p){p=p->next;l=l->next;}return p;}}return NULL;} };

    總結

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

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