C++代碼隨想錄刷題知識分享-----面試題鏈表相交

一、題目要求

題目:給定兩條單鏈表 headAheadB,找出它們相交的起始節點(節點對象相同而非數值相等)。若無交點返回 null
限制:鏈表無環;函數返回后鏈表結構不能被破壞。

圖示兩個鏈表在節點 c1 開始相交:

題目數據 保證 整個鏈式結構中不存在環。

注意,函數返回結果后,鏈表必須 保持其原始結構 。

示例 1:

示例 2:

示例 3:

二、解法 1 —— “先求長度差 + 對齊再同步”(時間 O(m+n),空間 O(1))

1. 思路

  1. 先各自遍歷一次求出長度 lenAlenB
  2. 計算差值 d = |lenA - lenB|
  3. 讓較長鏈先走 d 步,剩余部分兩鏈長度一致。
  4. 兩指針同時前進,第一次相遇即交點;若最后都為 null 則無交點。

2. C++代碼

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode* curA = headA;ListNode* curB = headB;int lenA = 0;int lenB = 0;int chazhi;while(curA){curA=curA->next;lenA++;}while(curB){curB=curB->next;lenB++;}chazhi = abs(lenA-lenB);curA = headA;curB = headB;if (lenA>lenB){for(int i =0;i<chazhi;i++){curA=curA->next;}while(curA){if(curA==curB){return curA;}curA=curA->next;curB=curB->next;}}else{for(int i =0;i<chazhi;i++){curB=curB->next;}while(curA){if(curA==curB){return curA;}curA=curA->next;curB=curB->next;}}return NULL;}
};

三、解法 2 —— “雙指針互跳”(一次掃描更簡潔)

1. 關鍵思想

  • 指針 pA 從 A 鏈頭走到尾后 跳到 B 鏈頭
  • 指針 pB 從 B 鏈頭走到尾后 跳到 A 鏈頭
  • 若存在交點,它們在第 lenA + lenB - k 步會同時到達交點;
  • 若無交點,兩指針最終同時成為 nullptr,循環結束。

整體只走兩條鏈各一遍,總步數 lenA + lenB

?2. C++代碼

class Solution {
public:ListNode* getIntersectionNode(ListNode* headA, ListNode* headB) {// 若有任何一條為空,必無交點if (!headA || !headB) return nullptr;ListNode* pA = headA;   // 指針 AListNode* pB = headB;   // 指針 B/* 只要不相等就一直走:*  - pA 走完鏈 A 就跳到鏈 B 的頭*  - pB 走完鏈 B 就跳到鏈 A 的頭* 最多 lenA+lenB 步,兩指針必同時為交點或同時為 nullptr*/while (pA != pB) {pA = (pA ? pA->next : headB);  // 三元運算避免空指針訪問pB = (pB ? pB->next : headA);}return pA;   // 返回交點或 nullptr}
};

四、兩種解法對比

指標解法 1:先算長度差解法 2:雙指針互跳
時間復雜度O(m + n)O(m + n)
額外空間O(1)O(1)
代碼行數略長(需兩次遍歷 + 對齊)極簡
直觀難度★★★★★(第一次見需要理解“互跳”)
常用場景任何面試都能過高頻高贊寫法,面試官更青睞


五、重要知識點

知識點速記
比較節點地址交點要判斷 指針是否相同,不能只比較 val
虛擬頭 vs 不需要本題不必修改原鏈結構,通常不加 dummy;若要改鏈可加 dummy
時間下界至少 O(m+n),因為每節點都需被訪問
空間下界題面要求 O(1),因此不能用 set、vector 存節點
互跳原理走完自己鏈就走對方鏈,總步數相等,長短差抵消
無交點情況雙指針最終一起到 nullptr,返回 nullptr

六、面試官常追問

  1. 帶環鏈表場景如何處理?
    先用 Floyd 判環:

    • 若兩鏈一無環一有環 → 一定不相交;
    • 若都無環:按本題思路;
    • 若都同環:分“交點在環前”與“在環內”兩種討論。
  2. 能否用遞歸?
    理論可行但會消耗 O(m+n) 遞歸棧,不推薦。

  3. 如果鏈表非常長(百萬級),但內存緊張,使用哪種算法?
    互跳法依舊 O(1) 空間,非常適合。

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

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

相關文章

修改輸入框選擇框顏色

項目場景&#xff1a; 提示&#xff1a;這里簡述項目相關背景&#xff1a; 有時候需要改寫element原來輸入框/選擇框的顏色 問題描述 提示&#xff1a;這里描述項目中遇到的問題&#xff1a; 輸入框的話需要hover時邊框顏色修改&#xff0c;選擇值的時候邊框顏色修改以及選…

8.學習筆記-Maven進階(P82-P89)

&#xff08;一&#xff09;Maven-08-配置文件加載屬性 通過maven可以做版本的集中管理&#xff0c;所以能不能通過maven進行配置文件&#xff08;jdbc.properties&#xff09;的集中管理。 &#xff08;1&#xff09;resource-》jdbc.properties 可以識別$符號 因為只能…

基于Springboot+Mysql的漢服推廣網站(含LW+PPT+源碼+系統演示視頻+安裝說明)

系統功能 管理員功能&#xff1a;首頁、個人中心、漢服知識管理、服裝展示管理、服裝類別管理、用戶相冊管理、論壇交流、系統管理、訂單管理&#xff1b;用戶功能&#xff1a;首頁、個人中心、用戶相冊管理、論壇交流、我的收藏管理、訂單管理。 作者&#xff1a;計算機搬磚家…

Missashe考研日記-day30

Missashe考研日記-day30 0 寫在前面 日記也是寫到第30篇了哈哈&#xff0c;滿月了&#xff0c;雖然過了不止30天中間有斷更&#xff0c;但還是表揚一下自己堅持下來了。&#xff1a;&#xff09; 1 專業課408 學習時間&#xff1a;2h30min學習內容&#xff1a; 今天有其他事…

HHsuite同源序列搜索數據庫構建

HHsuite 可用的數據庫格式簡介 HHsuite 是用于蛋白質序列比對和同源性檢測的工具套件,它使用特定的數據庫格式以實現高效的數據存儲和快速的檢索。HHsuite 常用的數據庫格式主要基于 FFINDEX(Flat-File Index),這是一種簡單而高效的文件索引系統,它將數據文件(如蛋白質序…

基于HTML CANVAS和EXCEL的xlsx文件展示工具websheet

什么是WEBSHEET websheet基于HTML5的CANVAS和JAVASCRIPT開發的純前端xlsx文件展示控件&#xff0c;該控件著重的頁面展示&#xff0c;主要完成了文件導入、導出、文本展示、格式化文本、合并單元格、邊框、底色、設置行列寬度高度&#xff0c;行列隱藏、視圖鎖定、基礎表格、撤…

Android Studio for Platform(ASFP)真機調試

連接設備 由于ubuntu連接adb設備每次都需要配置usb權限&#xff0c;很麻煩。并且每次換設備還要重新配置&#xff0c;我多數設備都是用wifi的adb方式連接。 開發板顯示 連接顯示器配合usb鼠標或者遙控器操作&#xff08;因為開發板默認開啟了adb&#xff0c;我這里是使用有線…

基于springboot+vue的健康健身追蹤系統

開發語言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服務器&#xff1a;tomcat7數據庫&#xff1a;mysql 5.7數據庫工具&#xff1a;Navicat11開發軟件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.3.9 系統展示 用戶信息管理 健…

Ubuntu下安裝vsode+qt搭建開發框架(一)

Ubuntu下安裝vsode+qt搭建開發框架(一) g++的編譯環境,這里不介紹,可點擊這里查看 查看一下當前的g++環境 g++ --version g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 Copyright (C) 2021 Free Software Foundation, Inc. This is free software; see the source for copyin…

php 需要學會哪些技術棧,掌握哪些框架

作為一個「野生」程序員&#xff0c;我的學習過程比較急功近利。 我記得自己寫的第一個 PHP 程序是留言本。一上來對 PHP 一竅不通&#xff0c;所以直接去網上找了個留言本的源碼&#xff0c;下載下來后先想辦法讓它在自己電腦上運行起來。通過這個過程掌握了 PHP 開發環境的搭…

近期實踐總結

一、計算機二級考試到底教會了我們什么&#xff1f; 1、概況 根據本人復習、考試的經驗&#xff0c;不難發現里面的試題或多或少有些死板&#xff08;甚至可以說落后于時代&#xff09;&#xff0c;當今時代已經不是二十年前什么都需要手搓的時代了&#xff0c;引擎、集成類軟…

js day8

事件綁定 事件&#xff1a;發生在html元素上的特定動作&#xff0c;鼠標點擊&#xff0c;鍵盤按下&#xff0c;鼠標移入 事件三要素&#xff1a;事件源&#xff08;觸發事件的元素&#xff09; 事件類型&#xff0c;事件觸發后執行的函數 通過html觸發事件&#xff08;不建議…

3.3 Spring Boot文件上傳

在 Spring Boot 項目中實現文件上傳功能&#xff0c;首先創建項目并添加依賴&#xff0c;包括 Commons IO 用于文件操作。接著&#xff0c;創建文件上傳控制器 FileUploadController&#xff0c;定義上傳目錄并實現文件上傳邏輯&#xff0c;通過生成唯一文件名避免文件沖突。創…

Spring的xxxAware接口工作原理-筆記

1.Aware 接口的工作原理 Spring 提供了多個 XXXAware 接口&#xff08;如 ApplicationEventPublisherAware、ApplicationContextAware、BeanFactoryAware 等&#xff09;&#xff0c;這些接口的核心作用是讓 Bean 在初始化過程中自動獲取特定的依賴。 實現 Aware 接口的 Bean…

Docker可用鏡像

加速域名 https://docker.sunzishaokao.comDockerHub鏡像加速器 - 免費Docker鏡像源國內加速 - DockerHub加速國內解決方案https://docker.1ms.runhttps://docker.1panel.livehttps://hub.rat.devhttps://docker.wanpeng.tophttps://doublezonline.cloudhttps://docker.mrxn.ne…

__proto__與prototype

__proto__與prototype的區別 基本概念剖析 #mermaid-svg-DXCtqoVX4u7x2Amd {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-DXCtqoVX4u7x2Amd .error-icon{fill:#552222;}#mermaid-svg-DXCtqoVX4u7x2Amd .error-tex…

在阿里云實例上部署通義千問QwQ-32B推理模型

通義千問QwQ-32B是阿里云開源的320億參數推理模型,通過大規模強化學習在數學推理、編程及通用任務中實現性能突破,支持消費級顯卡本地部署,兼顧高效推理與低資源消耗。 本文將介紹如何利用vLLM作為通義千問QwQ-32B模型的推理框架,在一臺阿里云GPU實例上構建通義千問QwQ-32…

SpringBoot獲取用戶信息常見問題(密碼屏蔽、駝峰命名和下劃線命名的自動轉換)

文章目錄 一、不返回password字段二、返回的createTime和updateTime為空原因解決&#xff1a;開啟駝峰命名和下劃線命名的自動轉換 一、不返回password字段 在字段上面添加JsonIgnore注解即可 JsonIgnore // 在把對象序列化成json字符串時&#xff0c;忽略該字段 private Str…

北斗導航 | 北斗衛星導航單點定位與深度學習結合提升精度

以下是北斗衛星導航單點定位(SPP)與深度學習結合提升精度的關鍵方法總結,綜合了誤差建模、信號識別、動態環境適應等技術方向: 一、非直射信號(NLOS)抑制與權重修正 1. 雙自注意力網絡(Dual Self-Attention Network) 原理:通過同時建模衛星信號的空間環境特征(如天空…

PostSwigger 的 CSRF 漏洞總結

本文所提供的關于 web 安全的相關信息、技術講解及案例分析等內容&#xff0c;僅用于知識分享與學術交流目的&#xff0c;旨在提升讀者對 web 安全領域的認知與理解。以下僅僅是作者對 PostSwigger Web 安全的知識整理和分享&#xff0c;嚴禁任何非法犯罪活動。 限制 CSRF 的三…