力扣熱題100刷題day61|234.回文鏈表(兩種方法)

一、回文鏈表

234.回文鏈表

兩種解法

解法1:時間復雜度O(n) 空間復雜度O(n)

遍歷鏈表,計算鏈表長度,創建同樣長度大小的數組,用數組存儲鏈表中所有元素,之后雙指針遍歷鏈表,一個從頭開始,一個從尾開始,比較元素是否相等;

class Solution {public boolean isPalindrome(ListNode head) {ListNode curr = head;int len = 0;if(head.next == null){return true;}while(curr != null){len++;curr = curr.next;}//重置currcurr = head;int[] nums = new int[len];for(int i = 0;i < nums.length;i++){if(curr != null){nums[i] = curr.val;curr = curr.next;}else{break;}}for(int i = 0,j = nums.length - 1;i < j;i++,j--){if(nums[i] != nums[j]) return false;}return true;}
}

注意??:求完鏈表長度后,記得重置curr;?

解法2:時間復雜度O(n) 空間復雜度O(1)

快慢指針法(??)

定義兩個指針,快指針fast,慢指針slow,初始指向頭結點,只要fast != null && fast.next != null,那么慢指針每次移動一個結點,快指針每次移動兩個結點;直到fast不滿足條件,此時,慢指針指向中點(鏈表個數為奇數),或者中點偏右的位置(鏈表個數為偶數);

之后,反轉后半部分鏈表,然后比較前后兩部分的數值,相等,則為回文鏈表,否則不是;

使用快慢指針法找到鏈表的中點的原理:

快指針的速度是慢指針的 2 倍所以當快指針走完全程時,慢指針剛好走了一半。

慢指針走過的路程為 x,那么快指針就是2x,2x = len,則x = 1/2 len;

class Solution {public boolean isPalindrome(ListNode head) {//快慢指針ListNode slow = new ListNode();ListNode fast = new ListNode();if(head == null || head.next == null){return true;}slow = head;fast = head;while(fast != null && fast.next != null){slow = slow.next;fast = fast.next.next;}//若鏈表為奇數個 此時slow指向中間點//若鏈表為偶數個 此時slow指向中間偏右的結點//反轉后半部分鏈表ListNode pre = null;ListNode curr = slow;while(curr != null){ListNode temp = curr.next;curr.next = pre;pre = curr;curr = temp;}//此時pre指向反轉后鏈表的頭部//比較前后兩部分鏈表ListNode pA = head;ListNode pB = pre;while(pB != null){if(pA.val != pB.val){return false;}pA = pA.next;pB = pB.next;}return true;}
}

注意??:在比較前后兩部分鏈表時,while中的判斷條件只能是pB != null;

如果是pA != null,那么當鏈表個數為偶數時:1 2 3 4;

slow最后指向3,后半部分反轉后,整體鏈表結構為:

前:1 --> 2 -->3 --> null? ? ? ?

后:4 ---> 3 --> null

pA遍歷的是前半部分的鏈表,pB遍歷后半部分,當pB指向null時,pA指向3,不為空,進入循環,pB.val就會報錯:空指針異常;?

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

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

相關文章

vue3+element-plus動態與靜態表格數據渲染

一、表格組件&#xff1a; <template> <el-table ref"myTable" :data"tableData" :header-cell-style"headerCellStyle" header-row-class-name"my-table-header" cell-class-name"my-td-cell" :row-style"r…

Kafka 中的生產者分區策略

Kafka 中的 生產者分區策略 是決定消息如何分配到不同分區的機制。這個策略對 Kafka 的性能、負載均衡、消息順序性等有重要影響。了解它對于高效地使用 Kafka 進行消息生產和消費至關重要。 讓我們一起來看 Kafka 中 生產者的分區策略&#xff0c;它如何工作&#xff0c;以及…

《從零搭建Vue3項目實戰》(AI輔助搭建Vue3+ElemntPlus后臺管理項目)零基礎入門系列第二篇:項目創建和初始化

&#x1f91f;致敬讀者 &#x1f7e9;感謝閱讀&#x1f7e6;笑口常開&#x1f7ea;生日快樂?早點睡覺 &#x1f4d8;博主相關 &#x1f7e7;博主信息&#x1f7e8;博客首頁&#x1f7eb;專欄推薦&#x1f7e5;活動信息 文章目錄 《從零搭建Vue3項目實戰》&#xff08;AI輔助…

全國產FMC子卡-16bit 8通道2.4G

國產化FMC DA子卡&#xff0c;16bit 8通道2.4GS/s 全國產FMC子卡是一款高分辨率、高采樣率的全國產多通道標準雙寬DAC FMC子板。其接口電氣和結構設計均依據FMC標準(ANSI/VITA 57.1)&#xff0c;通過兩個高密度FMC連接器&#xff08;HPC&#xff09;連接至FPGA載板。它提供8路A…

linux-添加開機自啟動指定腳本

一、systemd 服務&#xff08;主流方法&#xff09; 適用于使用systemd的現代發行版&#xff08;Ubuntu 16.04/CentOS 7&#xff09; 創建服務文件 sudo nano /etc/systemd/system/your_script.service寫入服務配置&#xff08;示例&#xff09;&#xff1a; [Unit] Descri…

Spring MVC 返回 JSON 視圖的方式及對比(6種)

Spring MVC 返回 JSON 視圖的方式及對比&#xff08;新增 MappingJackson2JsonView&#xff09; 1. 方式一&#xff1a;ResponseBody 注解 作用&#xff1a;直接返回對象&#xff0c;由消息轉換器&#xff08;如 Jackson&#xff09;序列化為 JSON。 適用場景&#xff1a;簡單…

瑞芯微RK3568嵌入式AI項目實戰:智能家居項目(二)

RK3568智能家居項目實戰指南&#xff1a;從入門到精通的完整制作流程 瑞芯微RK3568作為一款高性能嵌入式處理器&#xff0c;憑借其四核Cortex-A55架構、1T算力NPU和豐富的外設接口&#xff0c;成為智能家居項目開發的理想平臺。下面我將推薦幾個典型的RK3568智能家居項目&…

GStreamer開發筆記(一):GStreamer介紹,在windows平臺部署安裝,打開usb攝像頭對比測試

若該文為原創文章&#xff0c;轉載請注明原文出處 本文章博客地址&#xff1a;https://blog.csdn.net/qq21497936/article/details/147049923 長沙紅胖子Qt&#xff08;長沙創微智科&#xff09;博文大全&#xff1a;開發技術集合&#xff08;包含Qt實用技術、樹莓派、三維、O…

Spring Boot 3.4.3 和 Spring Security 6.4.2 實現基于內存和 MySQL 的用戶認證

在 Web 應用開發中&#xff0c;用戶認證是保障系統安全的基礎需求。Spring Boot 3.4.3 結合 Spring Security 6.4.2 提供了強大的安全框架支持&#xff0c;可以輕松實現基于內存或數據庫的用戶認證功能。本文將詳細介紹如何在 Spring Boot 3.4.3 中集成 Spring Security 6.4.2&…

HOW - Axios 攔截器特性

目錄 Axios 介紹攔截器特性1. 統一添加 Token&#xff08;請求攔截器&#xff09;2. 處理 401 未授權&#xff08;響應攔截器&#xff09;3. 統一處理錯誤信息&#xff08;響應攔截器&#xff09;4. 請求 Loading 狀態管理5. 自動重試請求&#xff08;如 429 過載&#xff09;6…

JVM核心機制:類加載×字節碼引擎×垃圾回收機制

&#x1f680;前言 “為什么你的Spring應用啟動慢&#xff1f;為什么GC總是突然卡頓&#xff1f;答案藏在JVM的核心機制里&#xff01; 本文將用全流程圖解字節碼案例&#xff0c;帶你穿透三大核心機制&#xff1a; 類加載&#xff1a;雙親委派如何防止惡意代碼入侵&#xff…

coze生成流程圖和思維導圖工作流

需求&#xff1a;通過coze平臺實現生成流程圖和思維導圖&#xff0c;要求支持文檔上傳 最終工作流如下&#xff1a; 入參&#xff1a; 整合用戶需求文件內容的工作流&#xff1a;https://blog.csdn.net/YXWik/article/details/147040071 選擇器分發&#xff0c;不同的類型走…

網絡安全應急響應-文件痕跡排查

在Windows系統的網絡安全應急響應中&#xff0c;文件痕跡排查是識別攻擊行為的關鍵步驟。以下是針對敏感目錄的詳細排查指南及擴展建議&#xff1a; 1. 臨時目錄排查&#xff08;Temp/Tmp&#xff09; 路徑示例&#xff1a; C:\Windows\TempC:\Users\<用戶名>\AppData\L…

SpringBoot集成Redis 靈活使用 TypedTuple 和 DefaultTypedTuple 實現 Redis ZSet 的復雜操作

以下是 Spring Boot 集成 Redis 中 TypedTuple 和 DefaultTypedTuple 的詳細使用說明&#xff0c;包含代碼示例和場景說明&#xff1a; 1. 什么是 TypedTuple 和 DefaultTypedTuple&#xff1f; TypedTuple<T> 接口&#xff1a; 定義了 Redis 中有序集合&#xff08;ZSet…

遞歸實現組合型枚舉(DFS)

從 1~n 這 n 個整數中隨機選出 m 個&#xff0c;輸出所有可能的選擇方案。 輸入格式 兩個整數 n,m,在同一行用空格隔開。 輸出格式 按照從小到大的順序輸出所有方案&#xff0c;每行 1 個。 首先&#xff0c;同一行內的數升序排列&#xff0c;相鄰兩個數用一個空格隔開。…

CentOS 7 鏡像源失效解決方案(2025年)

執行 yum update 報錯&#xff1a; yum install -y yum-utils \ > device-mapper-persistent-data \ > lvm2 --skip-broken 已加載插件&#xff1a;fastestmirror, langpacks Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://mirror…

vue3 腳手架初始化項目生成文件的介紹

文章目錄 一、介紹二、舉例說明1.src/http/index.js2.src/router/index.js3.src/router/routes.js4.src/stores/index.js5.src/App.vue6.src/main.js7.babel.config.js8.jsconfig.json9.vue.config.js10. .env11.src/mock/index.js12.src/mock/mock-i18n.js13.src/locales/en.j…

ubuntu 20.04 編譯和運行A-LOAM

1.搭建文件目錄和clone代碼 mkdir -p A-LOAM/src cd A-LOAM/src git clone https://github.com/HKUST-Aerial-Robotics/A-LOAM cd .. 2.修改代碼文件 2.1 由于PCL版本1.10&#xff0c;將CMakeLists.txt中的C標準改為14&#xff1a; set(CMAKE_CXX_FLAGS "-stdc14"…

【教程】MacBook 安裝 VSCode 并連接遠程服務器

目錄 需求步驟問題處理 需求 在 Mac 上安裝 VSCode&#xff0c;并連接跳板機和服務器。 步驟 Step1&#xff1a;從VSCode官網&#xff08;https://code.visualstudio.com/download&#xff09;下載安裝包&#xff1a; Step2&#xff1a;下載完成之后&#xff0c;直接雙擊就能…

LabVIEW 長期項目開發

LabVIEW 憑借其圖形化編程的獨特優勢&#xff0c;在工業自動化、測試測量等領域得到了廣泛應用。對于長期運行、持續迭代的 LabVIEW 項目而言&#xff0c;其開發過程涵蓋架構設計、代碼管理、性能優化等多個關鍵環節&#xff0c;每個環節都對項目的成功起著至關重要的作用。下面…