Hot100——鏈表專項

目錄

相交鏈表

反轉鏈表

?回文鏈表

環形鏈表?

合并兩個有序鏈表


相交鏈表

ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {if (headA == nullptr || headB == nullptr) {return nullptr;}ListNode *pA = headA;ListNode *pB = headB;while (pA != pB) {pA = (pA == nullptr)? headB : pA->next;pB = (pB == nullptr)? headA : pB->next;}return pA;}

顯然while循環是整個邏輯最重要的地方:這里使用了雙指針的方法。

  1. 外層循環while (pA != pB)?表示只要指針?pA?和?pB?沒有指向同一個節點,就持續循環。這是確保兩個指針不斷移動,直到找到相交節點或者確定沒有相交節點的控制條件。
  2. pA?指針移動邏輯pA = (pA == nullptr)? headB : pA->next;?這行代碼使用了條件運算符(三元運算符)。如果?pA?指向?nullptr,意味著?pA?已經遍歷完了它原本所在的鏈表,此時將?pA?重新指向鏈表?headB?的頭節點;否則,pA?就移動到當前節點的下一個節點。
  3. pB?指針移動邏輯pB = (pB == nullptr)? headA : pB->next;?與?pA?的移動邏輯類似。如果?pB?指向?nullptr,即?pB?遍歷完了它原本所在的鏈表,就將?pB?重新指向鏈表?headA?的頭節點;否則,pB?移動到當前節點的下一個節點。

通過這樣的邏輯,兩個指針會在相同的總步數下遍歷鏈表。如果兩個鏈表相交,它們最終會指向同一個相交節點;如果兩個鏈表不相交,那么?pA?和?pB?最終都會指向?nullptr,從而結束循環。

例如,假設有兩個鏈表?A?和?BA?鏈表為?1 -> 2 -> 3 -> 6 -> 7B?鏈表為?4 -> 5 -> 6 -> 7pA?從?A?鏈表頭?1?開始,pB?從?B?鏈表頭?4?開始。當?pA?遍歷完?1 -> 2 -> 3?后指向?nullptr,此時重新指向?B?鏈表頭?4,繼續遍歷?4 -> 5,而?pB?遍歷完?4 -> 5?后指向?nullptr,重新指向?A?鏈表頭?1,繼續遍歷?1 -> 2 -> 3,最終?pA?和?pB?都會指向相交節點?6

反轉鏈表

ListNode* reverseList(ListNode* head) {// 遞歸終止條件:如果當前節點為空或為尾節點,直接返回if (head == nullptr || head->next == nullptr) {return head;}// 遞歸處理當前節點的下一個節點ListNode* newHead = reverseList(head->next);// 回溯部分:反轉指針方向head->next->next = head;head->next = nullptr;return newHead;}
  • 遞歸法:以節點為單位進行操作,從鏈表尾部開始反轉。函數接收當前節點作為參數,先遞歸調用自身處理當前節點的下一個節點,當到達鏈表尾部時返回該節點(作為新的頭節點)。然后在回溯過程中,將當前節點的下一個節點的?next?指針指向當前節點,并將當前節點的?next?指針置空,完成反轉操作。

    ?

?回文鏈表

bool isPalindrome(ListNode* head) {bool b=true;std::vector<int> temp;ListNode* p=head;while(p!=nullptr){temp.push_back(p->val);p = p->next;}int n = temp.size();for (int i = 0; i < n / 2; ++i) {if (temp[i] != temp[n - 1 - i]) {return false;}}return b;}

好吧,通過很笨的辦法,把鏈表弄到數組里,然后兩個指針依次比較q_q

環形鏈表?

bool hasCycle(ListNode *head) {std::unordered_set<ListNode*> visited;ListNode* curr = head;while (curr != nullptr) {// 如果節點已在哈希表中,說明有環if (visited.find(curr) != visited.end()) {return true;}// 將當前節點加入哈希表visited.insert(curr);// 移動到下一個節點curr = curr->next;}// 遍歷完鏈表無重復,說明無環return false;}

?好吧,依舊是簡單粗暴,直接丟哈希表里面,然后通過哈希表現有的函數直接去檢查是否沖突
?

合并兩個有序鏈表

ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {ListNode* dummy=new ListNode();ListNode* curr=dummy;ListNode* p1=list1;ListNode* p2=list2;while(p1!=nullptr&&p2!=nullptr){if(p1->val<p2->val){curr->next=p1;p1=p1->next;}else{curr->next=p2;p2=p2->next;}curr=curr->next;}curr->next=(p1!=nullptr)?p1:p2;ListNode* result=dummy->next;delete dummy;return result;}

?這里使用了迭代法,依舊是簡單無腦遍歷,通過兩個指針比大小,小的就先放進去。嗯就這樣。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84242.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84242.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84242.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java + Spring Boot 后端防抖切面類AOP代碼問題排查分析

需排查分析的防抖切面類 AOP代碼&#xff1a; package com.weiyu.aop;import com.weiyu.anno.Debounce; import com.weiyu.utils.DebounceUtil; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotatio…

【FreeRTOS-信號量】

參照正點原子以及以下gitee筆記整理本博客&#xff0c;并將實驗結果附在文末。 https://gitee.com/xrbin/FreeRTOS_learning/tree/master 一、信號量簡介 1、什么是信號量 答&#xff1a;信號量是一種解決同步問題的機制&#xff0c;可以實現對共享資源的有序訪問。 假設有…

C++中decltype / auto 類型自動推導的深入講解

一、基本定義 關鍵字含義出現版本auto根據初始化表達式自動推導類型C11decltype根據表達式的類型推導類型C11 二、二者區別 特性autodecltype(expr)用途聲明變量獲取表達式類型是否需要初始化是否&#xff08;可用表達式&#xff0c;如函數參數&#xff09;是否推導引用否&am…

Echarts數據可視化開發教程+120套開源數據可視化大屏H5模板

數據可視化跨越了語言、技術和專業的邊界&#xff0c;是能夠推動實現跨界溝通&#xff0c;實現國際間跨行業的創新的工具。 正如畫家用顏料表達自我&#xff0c;作者用文字講述故事&#xff0c;而統計人員用數字溝通 ...... 同樣&#xff0c;數據可視化的核心還是傳達信息。 …

華為提取版,低調使用!

大家好呀&#xff01;今天想給大家推薦兩款實用軟件&#xff0c;一個是視頻軟件的定制版&#xff0c;另一個是衛星地圖軟件。 01 引言 之前給大家推薦過某秋音樂的定制版&#xff0c;結果被投訴了。以后大家推薦某秋家的軟件要小心&#xff0c;不然很容易違規。 今天推薦的是…

天匯企業的網絡設計與實現

天匯企業網絡的設計與實現 摘要&#xff1a;互聯網技術與通信技術的相互帶動作用&#xff0c;使得兩者皆呈現多樣化的快速發展趨勢&#xff0c;5G的時代序幕在已經逐漸開啟&#xff0c;由此引發的互聯網技術和設備變革必然是各界人士關注的重點&#xff0c;幾乎所有與計算機相…

系統架構設計師:安全架構考點解析與例題

一、安全架構概述 安全架構是系統架構設計中確保信息系統安全性的重要組成部分,它定義了保護系統免受安全威脅的策略、技術和方法。安全架構需要貫穿系統設計的全生命周期,從需求分析到部署運維。 安全架構核心目標 ??保密性??:防止未授權訪問信息??完整性??:防止…

計量經濟學(復習/自用/未完)

補充&#xff1a; 1、多重共線性的補充 所謂的估計標準誤&#xff0c;指的是回歸系數的標準誤差。例如回歸方程&#xff1a; y β0 β1X1 β2X2 e 我們構建的回歸方程的系數的計算得出是基于樣本的。這意味著&#xff0c;我們每從總體中進行一次抽樣&#xff0c;然后計算…

HarmonyOS性能優化——感知流暢優化

在應用開發中&#xff0c;動畫可以為用戶界面增添生動、流暢的交互效果&#xff0c;提升用戶對應用的好感度。然而&#xff0c;濫用動畫也會導致應用性能下降&#xff0c;消耗過多的系統資源&#xff0c;甚至影響用戶體驗。關于感知流暢度請參閱提升動畫感知流暢度。 視覺感知…

基于Python的房屋信息可視化及價格預測系統

開發語言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.10(必須)數據庫&#xff1a;mysql 5.7數據庫工具&#xff1a;Navicat12開發軟件&#xff1a;PyCharm 系統展示 系統首頁 系統登錄 房價預測 房屋管理 房屋分析 個人信息 密碼修改 用戶管理 摘…

(17)-java+ selenium->自動化測試-元素定位大法之By css上

1.簡介 CSS定位方式和xpath定位方式基本相同,只是CSS定位表達式有其自己的格式。CSS定位方式擁有比xpath定位速度快,且比CSS穩定的特性。下面詳細介紹CSS定位方式的使用方法。相對CSS來說,具有語法簡單,定位速度快等優點。 2.CSS定位優勢 CSS定位是平常使用過程中非常重要…

高效I/O處理:模型與多路復用的探討

目錄 一、了解IO模型 &#xff08;一&#xff09;異步IO和同步IO &#xff08;二&#xff09;五種IO快速回顧 二、IO多路復用 &#xff08;一&#xff09;IO 多路復用模型 &#xff08;二&#xff09;select 實現原理 &#xff08;三&#xff09;poll 實現原理 &#x…

行列式展開定理(第三種定義) 線性代數

目錄 1.余子式 2代數余子式 3行列式展開公式&#xff08;常用&#xff09; 本篇的用途是關于三階以上行列式的一般解法。因為對于三階以上行列式我們沒有類似于2階和三階一樣的特殊的求值辦法&#xff0c;而對于我們上一篇講的辦法來說又太復雜了&#xff0c;一般考試幾乎不…

一種輕量級IDS,使用新型特征選擇方法進行早期APT檢測

大家讀完覺得有幫助記得關注和點贊&#xff01;&#xff01;&#xff01; 高級持續性威脅 (APT) 是一種多階段、高度復雜且隱蔽的網絡威脅形式&#xff0c;它通過獲得對網絡的未授權訪問來竊取有價值的數據或破壞目標網絡。這些威脅通常在很長一段時間內未被發現&#xff0c;這…

深入理解 let、var 和 const

JavaScript 中的變量聲明有三種主要方式&#xff1a;var、let 和 const。理解它們之間的差異對于編寫清晰、有效的代碼至關重要。本文將深入探討這三種聲明方式的區別、使用場景以及潛在的陷阱。 一、var 關鍵字 1.1 特點 函數作用域&#xff1a;var 聲明的變量在函數內是局…

RT thread 在gd32f303平臺下rtc bug date獲取時間錯誤始終是1970

現象 時間設置指令 date 2025 6 18 10 28 00 時間獲取指令 date date指定顯示設置OK,但是返回的時間始終是Thu Jan 1 08:00:00 1970 msh >date local time: Thu Jan 1 08:00:00 1970 timestamps: 0 timezone: UTC+

jieba中lcut與cut的區別及用法

jieba 庫中的 cut 和 lcut 是中文分詞的核心函數&#xff0c;兩者的核心區別在于??返回類型??和??適用場景??&#xff0c;具體對比如下&#xff1a; ?? 1. ??核心區別?? ??函數????返回類型????特點????等價操作??jieba.cut生成器&#xff08;G…

LoRA、QLoRA是什么

一&#xff1a; LoRA&#xff08;Low-Rank Adaptation&#xff0c;低秩適應&#xff09;是一種高效的大模型參數微調技術&#xff0c;由Meta在2021年提出。它通過凍結預訓練模型參數&#xff0c;僅訓練少量新增的低秩矩陣&#xff0c;大幅減少了需要訓練的參數量&#xff0c;同…

【web應用】在 Vue 3 中實現餅圖:使用 Chart.js實現餅圖顯示數據分析結果

文章目錄 前言一、準備工作二、實現餅圖組件三、關鍵點解析四、實現效果總結 前言 在現代 Web 應用中&#xff0c;數據可視化是不可或缺的一部分。無論是展示統計信息還是監控關鍵指標&#xff0c;圖表都能幫助用戶更直觀地理解數據。在 Vue 3 項目中&#xff0c;我們可以使用…

分頁數據不準問題分析與解決

大綱 &#x1f4d6; 1、場景 &#x1fab5;2、原因 &#x1f525;3、解決方式&#xff1a;游標分頁 &#x1f4cf;4、一點思考&#x1f4a1;5、全表查詢的優化思路 &#x1f345; 記錄一個分頁不準的問題 1、場景 &#x1fab5; 調用一個第三方List接口&#xff08;帶分頁&am…