Day8--HOT100--160. 相交鏈表,206. 反轉鏈表,234. 回文鏈表,876. 鏈表的中間結點

Day8–HOT100–160. 相交鏈表,206. 反轉鏈表,234. 回文鏈表,876. 鏈表的中間結點

每日刷題系列。今天的題目是力扣HOT100題單。

鏈表題目。

160. 相交鏈表

思路【我】:

1,計算鏈表長度

2,令A為較短鏈(如果B是短鏈,交換鏈表指針p和長度len)

3,長鏈B先遍歷gap個長度

4,開始遍歷,返回第一個相等點,遍歷結束還沒有相等點,就是沒有。

public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {// 思路:末端對齊,也就是長鏈先遍歷gap個長度// 然后遍歷,返回第一個相等點,遍歷結束還沒有相等點,就是沒有。ListNode pa = new ListNode();ListNode pb = new ListNode();// 1,計算鏈表長度int lenA = 0;int lenB = 0;pa = headA;pb = headB;while (pa != null) {pa = pa.next;lenA++;}while (pb != null) {pb = pb.next;lenB++;}// 2,令A為較短鏈(如果B是短鏈,交換鏈表指針p和長度len)pa = headA;pb = headB;if (lenA > lenB) {int temp = lenA;lenA = lenB;lenB = temp;ListNode tem = pa;pa = pb;pb = tem;}// 3,長鏈B先遍歷gap個長度int gap = lenB - lenA;while (gap-- > 0) {pb = pb.next;}// 4,開始遍歷while (pa != null) {if (pa == pb) {return pa;}pa = pa.next;pb = pb.next;}return null;}
}

思路【@靈艾山茶府】:

p和q終會相等,要么在交點,要么都是null。

  • 假設A鏈條長度為x+z,B鏈表長度為y+z,其中z為相交后共同的長度。
    • 如果相交在交點,那么走過的路:p為x+z+y,q為y+z+x。
    • 如果相等在null,那么走過的路:p為x+y,q為y+x。(此時沒有z)
class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode p = headA;ListNode q = headB;while (p != q) {p = p != null ? p.next : headB;q = q != null ? q.next : headA;}return p;}
}

206. 反轉鏈表

思路【我】:

需要一個pre指針作為輔助,pre需要初始化為null不能為new ListNode(),因為這是反轉后的尾巴,如果是new ListNode的話會多了一個節點。

  • 當指針p不為空的時候,遍歷。
    • 需要temp緩存p.next,即下一個要反轉的對象
    • 然后將p.next往前指向pre
    • pre指針到下一個對象,即p
    • p指針到下一個對象,即temp
  • 最后當p為null的時候,證明pre是原鏈表的結尾,返回pre
class Solution {public ListNode reverseList(ListNode head) {ListNode pre = null;ListNode p = head;while (p != null) {ListNode temp = p.next;p.next = pre;pre = p;p = temp;}return pre;}
}

234. 回文鏈表

思路【我】:

反轉鏈表+中心擴散法。

1,算長度len

2,反轉左半部分

3,p是左半部分最后一位,temp=p.next,也就是右半部分的第一位了,所以right指向它。(如果len為奇數,temp是中間位置,中間位置的元素不用管,所以指針right = temp.next)

4,開始遍歷。p和right現在在中間,向兩遍擴散,一旦不相等返回false

5,遍歷后,全部相等,返回true

class Solution {public boolean isPalindrome(ListNode head) {// 思路:反轉鏈表+中心擴散法// 找到中間位置mid,分成兩半部分來處理// 左半部分,反轉鏈表// 左指針從中間往左遍歷,右指針從中間往右遍歷// 1,算長度lenint len = 0;ListNode p = head;while (p != null) {p = p.next;len++;}if (len == 1) {return true;}// 2,反轉前半部分ListNode pre = null;p = head;// 這個temp本來是可以在循環體內的臨時變量,但是下面需要用到,所以在外部定義.ListNode temp = p.next;for (int i = 0; i < len / 2; i++) {temp = p.next;p.next = pre;pre = p;// 這個if是為了,讓p留在左半部分的最后一位// p就是左半部分,反轉后,鏈表的頭if (i + 1 == len / 2) {break;}p = temp;}// 3,p是左半部分最后一位,temp=p.next,也就是右半部分的第一位了,所以right指向它ListNode right;if (len % 2 == 0) {right = temp;} else {// 如果len為奇數,temp是中間位置,中間位置的元素不用管,所以指針right指向下一個right = temp.next;}// 4,開始遍歷。p和right現在在中間,向兩遍擴散,一旦不相等返回falsewhile (p != null) {if (p.val != right.val) {return false;}p = p.next;right = right.next;}// 5,遍歷后,全部相等,返回truereturn true;}
}

876. 鏈表的中間結點

加餐題目

傳統做法,先第一遍遍歷找到長度len,第二遍遍歷到n/2的位置,判斷奇偶數返回對應位置。和我上題的找中間節點的方法是一樣的。

但是這道題目,看了題解之后,看到@靈艾山茶府還可以用快慢指針法。

思路【@靈艾山茶府】:

快慢指針法,快指針走的速度是慢指針的2倍,當快指針到n,慢指針就是在中間位置。

class Solution {public ListNode middleNode(ListNode head) {// 快慢指針法,快指針走的速度是慢指針的2倍,當快指針到n,慢指針就是在中間位置ListNode fast = head;ListNode slow = head;while (fast != null && fast.next != null) {slow = slow.next;fast = fast.next.next;}return slow;}
}

由此,234回文鏈表的做法,也可以直接調用反轉鏈表的方法,和尋找鏈表中間點的方法:

class Solution {public boolean isPalindrome(ListNode head) {ListNode mid = middleNode(head);ListNode right = reverseList(mid);ListNode left = head;// right:從 mid 到結束// left :從開始到 midwhile (right != null) {if (left.val != right.val) {return false;}left = left.next;right = right.next;}return true;}// 876. 鏈表的中間結點private ListNode middleNode(ListNode head) {ListNode slow = head;ListNode fast = head;while (fast != null && fast.next != null) {slow = slow.next;fast = fast.next.next;}return slow;}// 206. 反轉鏈表private ListNode reverseList(ListNode head) {ListNode pre = null;ListNode cur = head;while (cur != null) {ListNode nxt = cur.next;cur.next = pre;pre = cur;cur = nxt;}return pre;}
}

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

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

相關文章

Rust面試題及詳細答案120道(58-65)-- 集合類型

《前后端面試題》專欄集合了前后端各個知識模塊的面試題&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

Horse3D游戲引擎研發筆記(八):在QtOpenGL環境下,按需加載彩虹四邊形的頂點屬性 (Unity、Unreal Engine、Three.js與Godot)

在上一篇博客中&#xff0c;我們探討了如何在QtOpenGL環境下使用改進的Uniform變量管理方式繪制多彩四邊形。本文將延續這一主題&#xff0c;深入探討如何在QtOpenGL環境下按需加載彩虹四邊形的頂點屬性。這一功能是Horse3D引擎渲染系統的重要組成部分&#xff0c;旨在實現靈活…

模塊化設計+微米級精度,GelSight Modulus 觸覺型3D輪廓儀深入檢測“盲區”

當航空航天工程師在精密艙體中搜尋微米級缺陷&#xff0c;汽車檢查員在車間復雜結構里排查隱患&#xff0c;能源領域創新者嘗試突破檢測邊界時&#xff0c;深耕視觸覺 3D 顯微技術的企業——GelSight&#xff0c;正以全新研發的GelSight Modulus觸覺型3D輪廓儀&#xff08;簡稱…

Pytorch安裝詳細步驟

第一步&#xff1a;檢查顯卡支持的的CUDA版本 1.打開NVIDIA控制面板 首先鼠標右擊桌面-顯示更多選項-NVIDIA控制面板-點擊彈出界面右上角的(系統信息)-點擊彈出界面的(組件) 2.查看驅動版本 打開系統信息 點擊組件,查看 以觀測到紅色方框內的信息可以看到(NVIDIA CUDA 13.0.…

2025職場進階:低門檻技能實用手冊

每到年初&#xff0c;都會有人問&#xff1a;如果只能投入有限的時間與預算&#xff0c;先考哪一兩本證書更劃算&#xff1f;本文把近兩年的崗位需求、學習可獲得性與花費周期做了綜合權衡&#xff0c;給出一個以“先提升通用能力&#xff0c;再疊加行業資質”為主線的組合方案…

SDC命令詳解:使用set_timing_derate命令進行約束

相關閱讀 SDC命令詳解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482 目錄 指定降額比例 指定降額對象列表/集合 指定沿 指定最大、最小條件 指定早、晚條件 指定路徑的類型 指定降額類型 指定約束 指定增量 寫在最后 由于制造…

C++語言程序設計——03 進制ASCII碼

目錄一、進制表示與轉換&#xff08;一&#xff09;不同進制表示&#xff08;二&#xff09;進制轉換方法二、ASCII 碼&#xff08;一&#xff09;ASCII 碼表&#xff08;二&#xff09;ASCII 碼轉換&#xff08;三&#xff09;大小寫英文字母轉換【總結&#xff1a;如何記憶AS…

AtCoder Beginner Contest 420-Toggle Maze

題目描述 有一個 H行 W 列的網格。用 (i,j) 表示位于第 i 行&#xff08;從上往下數&#xff09;第 j 列&#xff08;從左往右數&#xff09;的格子。每個格子的狀態用字符 Ai,j表示&#xff0c;含義如下&#xff1a; . &#xff1a;空格子。 #’ &#xff1a;障礙格子。 S &am…

20、DMA----釋放CPU壓力,加快傳輸

1、DMA介紹DMA&#xff0c;全稱為&#xff1a;Direct Memory Access&#xff0c;即直接存儲器訪問。DMA傳輸方式無需CPU直接控制傳輸&#xff0c;也沒有中斷處理方式那樣保留現場和恢復現場的過程&#xff0c;通過硬件為RAM與I/O設備開辟一條直接傳送數據的通路&#xff0c;能使…

深入OpenHarmony OTA硬核升級

技術背景 OpenHarmony OTA(Over-The-Air)升級子系統為設備提供了遠程升級能力,通過統一的升級接口屏蔽底層芯片差異,支持輕量系統、小型系統和標準系統的全量升級、差分升級和變分區升級。 核心特性 跨系統支持:覆蓋輕量系統(Hi3861)、小型系統(Hi3516DV300)、標準系…

華為iVS1800接入SVMSPro平臺

華為iVS1800接入SVMSPro平臺 ** 華為好望Huawei HolosensIVS1800智能視頻云平臺采用首款昇騰310加持的嵌入式系統智能微邊緣&#xff0c;獨俱普惠AI鴻力。一臺融合存儲、計算、檢索功能&#xff0c;滿足小型園區、社區、銀行網點、超市等場景安防需求&#xff0c;小機大智。 …

《異形戰機2》v2.0.4數字豪華版,3D橫版射擊再臨,機體武器海量升級

[游戲名稱]: 《異形戰機2》v2.0.4數字豪華版 [軟件大小]: 17.7 GB [軟件大小]: 夸克網盤 | 百度網盤 游戲介紹 《異形戰機&#xff1a;最終版2》續作震撼登場&#xff01;經典橫版射擊全面升級&#xff1a;3D 畫面炫目、關卡與機體海量擴充&#xff0c;只為帶來酣暢淋漓的滅…

Java 異常(Throwable)

1. Throwable Throwable: 所有異常和錯誤的根類。實現 Throwable 或其子類的對象才能被 throw 或 catch。 Error: 表示嚴重的系統級問題&#xff0c;通常不應該被捕獲或處理&#xff0c;程序通常無法從中恢復。 Exception: 表示程序可以處理的問題。分為 運行時異常、 受檢異常…

rocketmq常用命令

官方文檔 https://rocketmq.apache.org/zh/docs/ https://rocketmq.apache.org/zh/docs/domainModel/02topic/ https://rocketmq.apache.org/zh/docs/4.x/deployment/02admintool 集群配置管理 https://mp.weixin.qq.com/s/688wNSwZPraGvAnr0K7hRw RocketMQ運維管理命令mqadm…

【C++詳解】哈希表概念與實現 開放定址法和鏈地址法、處理哈希沖突、哈希函數介紹

文章目錄一、unordered系列的使用unordered_set類的介紹unordered_set和set的使?差異unordered_map和map的使?差異unordered_xxx的哈希相關接?二、哈希表實現哈希概念直接定址法哈希沖突負載因?將關鍵字轉為整數哈希函數除法散列法/除留余數法乘法散列法處理哈希沖突開放定…

電影感人文街拍擺攤紀實攝影后期Lr調色教程,手機濾鏡PS+Lightroom預設下載!

調色介紹電影感人文街拍擺攤紀實攝影后期 Lr 調色是一種專注于捕捉街頭生活煙火氣的攝影風格&#xff0c;通過 Lightroom 后期調色賦予畫面電影般的敘事感和情感深度。這種風格以擺攤小販、市井行人、街頭場景為主體&#xff0c;強調真實、自然的生活瞬間。調色核心在于低飽和暖…

【數據分享】298個地級市人工智能企業數量(1990-2023)

數據介紹引言人工智能產業作為數字經濟的核心驅動力&#xff0c;其發展規模與分布格局深刻反映區域科技創新活力與產業升級潛力。為助力相關研究&#xff0c;本文分享一份涵蓋全國 298 個地級市 1990-2023 年的人工智能企業核心數據&#xff0c;包含人工智能企業存量和人工智能…

LeetCode 面試經典 150_雙指針_驗證回文串(25_125_C++_簡單)(雙指針)

LeetCode 面試經典 150_數組/字符串_驗證回文串&#xff08;25_125_C_簡單&#xff09;題目描述&#xff1a;輸入輸出樣例&#xff1a;題解&#xff1a;解題思路&#xff1a;思路一&#xff08;雙指針&#xff09;&#xff1a;代碼實現代碼實現&#xff08;思路一&#xff08;雙…

無障礙輔助模塊|Highcharts引領可訪問數據可視化的交流

在現代數據可視化中&#xff0c;無障礙輔助技術已成為必不可少的一部分。對于視障人士或使用屏幕閱讀器的用戶來說&#xff0c;傳統圖表往往難以獲取有效信息&#xff0c;而 Highcharts 在設計之初便充分考慮了無障礙體驗。 Highcharts作為可訪問數據可視化的倡導者&#xff0…

從0到1:數據庫進階之路,解鎖SQL與架構的奧秘

目錄一、SQL 基礎啟航1.1 SQL 基礎語法1.2 SQL 進階查詢1.3 SQL 實戰案例分析二、分庫分表實戰2.1 分庫分表的背景與原理2.2 分庫分表策略設計2.3 分布式 ID 生成2.4 數據遷移方案三、中間件實戰3.1 中間件概述3.2 DBLE 中間件實戰3.3 MyCat 中間件實戰四、高可用架構搭建4.1 高…