較難題 鏈表的回文結構

本題來自鏈表的回文結構_牛客題霸_牛客網 (nowcoder.com)

234. 回文鏈表 - 力扣(LeetCode)

題面:

對于一個鏈表,請設計一個時間復雜度為O(n),額外空間復雜度為O(1)的算法,判斷其是否為回文結構。

給定一個鏈表的頭指針A,請返回一個bool值,代表其是否為回文結構。保證鏈表長度小于等于900。

測試樣例:1->2->2->1

返回:true

思路:

方法一:

對于數組來說,可以先獲取數組的大小,然后從兩端向中間比較數值,本題給了鏈表的最大長度,因此可以先創建900大小的數組,讀取鏈表的值給數組

方法二:

先找遍歷一次,找鏈表的中間節點,也就是后一半鏈表的起始節點,然后給鏈表后半段逆置一下,再從頭,和這個新起始節點依次比較,彈出條件是這兩個指針指向的節點的值不相等,循環條件是后半段結束(偶數個節點,正好結束),或者即將結束(奇數個節點,最后一個節點自己對稱自己,不用比較這個節點)

在這里用到了兩個函數(自己做過的題)。一個是找鏈表的中點,一個是逆置鏈表?縫合怪

找中點的簡單題 鏈表的中間節點-CSDN博客

逆置鏈表的簡單題 反轉鏈表-CSDN博客

代碼:

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};*/class PalindromeList {
public:
typedef struct ListNode node;struct ListNode* middleNode(struct ListNode* head) // 找中間{// 雙指針——快慢指針法node* slow = head;node* fast = head;while (fast && fast->next)//當快指針到尾,或者快到尾都算結束{fast = fast->next->next;// 快指針一次走兩步slow = slow->next;// 慢指針一次走一步}return slow;
}
struct ListNode* reverseList(struct ListNode* head) // 逆置
{if (head == NULL && head->next == NULL)return head;struct ListNode* n1, * n2, * n3;n1 = head;n2 = n1->next;n3 = n2->next;n1->next = NULL;while (1){n2->next = n1;n1 = n2;n2 = n3;if (n2 == NULL)break;n3 = n3->next;}return n1;
}bool chkPalindrome(ListNode* A) {// write code herenode*list2=middleNode(A);list2=reverseList(list2);while(list2&&list2->next){if(A->val!=list2->val)return false;A=A->next;list2=list2->next;}return true;}
};

總結:

單鏈表的缺陷就是不能訪問上一個節點,因此直接逆置后半段,來模擬倒著訪問節點

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

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

相關文章

03.Linux文件操作

1.操作系統與Linux io框架 1.1 io與操作系統 1.1.1 io概念 io 描述的是硬件設備之間的數據交互,分為輸? (input) 與輸出 (output)。 輸?:應?程序從其他設備獲取數據 (read) 暫存到內存設備中;輸出:應?程序將內存暫存的數據…

FANUC機器人基本保養概述

對于工業機器人來說,定期保養機器人可以延長機器人的使用壽命。對于FANUC機器人來說,FANUC機器人的常規保養周期可以分為日常、三個月、六個月、一年、兩年、三年。以下是FANUC機器人的基本保養周期概覽: 在實際生產應用中,可以參…

具身智能論文

目錄 1. PoSE: Suppressing Perceptual Noise in Embodied Agents for Enhanced Semantic Navigation2. Embodied Intelligence: Bionic Robot Controller Integrating Environment Perception, Autonomous Planning, and Motion Control3. Can an Embodied Agent Find Your “…

7.STL_string(詳細)

1. 什么是STL STL(standard template libaray-標準模板庫):是C標準庫的重要組成部分,不僅是一個可復用的組件庫,而且 是一個包羅數據結構與算法的軟件框架。 2. STL的版本 原始版本 Alexander Stepanov、Meng Lee 在惠普實驗室完成的原始版…

maven遠程倉庫訪問順序

首先需要了解一下各個配置文件,主要分為三類: 全局配置文件(${maven.home}/conf/settings.xml),maven安裝路徑下的/conf/settings.xml用戶配置文件(%USER_HOME%/.m2/settings.xml),windows用戶文件夾下項目配置文件:p…

C/C++ 入門(10)list類(STL)

個人主頁:仍有未知等待探索-CSDN博客 專題分欄:C 歡迎來指教! 目錄 一、標準庫中的list 1、了解 2、常用接口說明 a.常見的構造函數 b.迭代器 c. Capacity?編輯 d.Element access e.Modifiers 二、實現 1、框架 a.節點 b.迭代器 …

簡單易懂的Java Queue入門教程!

哈嘍,各位小伙伴們,你們好呀,我是喵手。運營社區:C站/掘金/騰訊云;歡迎大家常來逛逛 今天我要給大家分享一些自己日常學習到的一些知識點,并以文字的形式跟大家一起交流,互相學習,一…

如何建設智慧黨校

隨著信息技術的飛速展開,特別是近年移動互聯網技術,物聯網技術,人工智能技術,大數據數據的深入展開,我國快速的進入信息化社會,信息化對各行各業的改造越來越深入,任何職業,任何安排…

SSM【Spring SpringMVC Mybatis】—— Spring(一)

目錄 1、初識Spring 1.1 Spring簡介 1.2 搭建Spring框架步驟 1.3 Spring特性 1.5 bean標簽詳解 2、SpringIOC底層實現 2.1 BeanFactory與ApplicationContexet 2.2 圖解IOC類的結構 3、Spring依賴注入數值問題【重點】 3.1 字面量數值 3.2 CDATA區 3.3 外部已聲明be…

淺談ArrayList和LinkedList的區別

ArrayList和LinkedList在Java中都是常用的List接口的實現類,但它們之間存在一些顯著的區別。 實現方式: ArrayList:基于數組實現。內部使用一個動態數組來存儲元素,這意味著可以通過索引快速訪問元素,時間復雜度為O(1)…

算法學習筆記(Nim游戲)

N i m Nim Nim游戲 n n n堆物品,每堆有 a i a_i ai?個,每個玩家輪流取走任意一堆的任意個物品,但不能不取,取走最后一個物品的人獲勝。 N i m Nim Nim游戲是一種經典的公平組合游戲。現在對它進行分析。 首先定義兩個博弈中的狀…

【Chisel】chisel中怎么處理類似verilog的可變位寬和parameter

在 Chisel 中處理可變位寬和參數的方式與 Verilog 有一些不同,因為 Chisel 是建立在 Scala 語言之上的。以下是如何在 Chisel 中處理這些概念的方法: 參數化(Parameters) 在 Chisel 中,參數化是通過在模塊構造函數中定…

VUE使用餓了么的上傳組件時實現圖片預覽

創作靈感 最近在寫項目時,遇到了上傳頭像的需求,我使用的是element組件中的upload組件。但是在使用時,我需要實現預覽、手動上傳頭像等功能。然而在使用餓了么組件時,這些功能還是需要我們自己去手動實現的,在手動實現…

Linux makefile進度條

語法 在依賴方法前面加上就不會顯示這一行的命令 注意 1.make 會在當前目錄下找名為“makefile” 或者 “Makefile” 的文件 2.為了生成第一依賴文件,如果依賴文件列表有文件不存在,則會到下面的依賴關系中查找 3..PHONY修飾的依賴文件總是被執行的 …

Redis——RDB、AOF和混合持久化機制

Redis提供了三種持久化機制來確保數據的持久保存,分別是RDB(Redis DataBase)、AOF(Append Only File)和混合持久化。 RDB(Redis DataBase) RDB持久化機制是將Redis在內存中的數據保存到磁盤上的…

xss-lab 1-18關payload

Less-1 ?name<script>alert()</script> Less-2 "><script>alert()</script> "οnclick"alert() " οnfοcus"alert() " οnblur"alert() Less-3 οnfοcusalert() οnbluralert() οnfοcusjavascript:aler…

Spring AopUtils深度解析:從入門到精通的全方位指南

1. 概述 AopUtils是Spring框架中的一個工具類&#xff0c;主要用于處理AOP&#xff08;面向切面編程&#xff09;相關的操作。它提供了一系列靜態方法&#xff0c;幫助開發者更方便地處理AOP中的對象、代理以及通知&#xff08;Advice&#xff09;等。 2. 用途 AopUtils的主要…

操作系統原理與系統——實驗十三多道批處理作業調度(作業可移動)

關鍵代碼 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct data{int hour;//當前小時int min;//當前分鐘 }time; struct node{char name[20];//進程名time arrive;//到達就緒隊列時間int zx;//執行時間(預期時間)int size;int ta…

Polygon市值機器人

隨著區塊鏈技術的蓬勃發展和數字貨幣市場的日益繁榮&#xff0c;投資者們對于如何精準把握市場動態、實現資產穩健增長的需求愈發迫切。在這個背景下&#xff08;市值管理飛//機//aishutuyu&#xff09;&#xff0c;Polygon市值機器人應運而生&#xff0c;作為一款基于Polygon公…

LeetCode 第397場周賽個人題解

目錄 100296. 兩個字符串的排列差 原題鏈接 思路分析 AC代碼 100274. 從魔法師身上吸取的最大能量 原題鏈接 思路分析 AC代碼 100281. 矩陣中的最大得分 原題鏈接 思路分析 AC代碼 100312. 找出分數最低的排列 原題鏈接 思路分析 AC代碼 100296. 兩個字符串的排…