【數據結構】_鏈表經典算法OJ(力扣/牛客第二彈)

目錄

1. 題目1:返回倒數第k個節點

1.1 題目鏈接及描述

1.2 解題思路

1.3 程序

2. 題目2:鏈表的回文結構

2.1 題目鏈接及描述

2.2 解題思路

2.3 程序


1. 題目1:返回倒數第k個節點

1.1 題目鏈接及描述

題目鏈接:

面試題 02.02. 返回倒數第 k 個節點 - 力扣(LeetCode)

題目描述:

實現一種算法,找出單向鏈表中倒數第 k 個節點。返回該節點的值。

(該題目已保證給定k保證有效)

1.2 解題思路

思路1:計數轉換為正數

遍歷單鏈表計數,假設計得鏈表結點數為n,倒數第k個元素即正數第n-k個元素,再遍歷返回第n-k個結點的值即可;

時間復雜度O(N)(但遍歷鏈表兩遍),空間復雜度O(1);

思路2:存儲到數組中再下標訪問正數元素

新創建一個數組,遍歷單鏈表,依次將鏈表的結點值記錄到數組中,假設計得鏈表結點數為n,結點值分別記錄到數組下標0~n-1的位置,返回下標為n-k的數組元素值即可;

時間復雜度O(N),空間復雜度O(N);

思路3:快慢指針(本題解法)

創建兩個指針,一個指針指向鏈表第一個結點,稱為慢指針;一個指針指向鏈表第k個結點,稱為快指針;

令兩個指針同時向后遍歷,直至快指針指向空時,此時慢指針即指向倒數第k個結點;

時間復雜度O(N)(只遍歷鏈表一遍),空間復雜度O(1);

1.3 程序

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
typedef struct ListNode ListNode;
int kthToLast(struct ListNode* head, int k) {ListNode* fast=head,*slow=head;// 令fast先走k步while(k--){fast=fast->next;}// 快慢同時走while(fast){slow=slow->next;fast=fast->next;}return slow->val;
}

2. 題目2:鏈表的回文結構

2.1 題目鏈接及描述

題目鏈接:鏈表的回文結構_牛客題霸_牛客網

題目描述:

對于一個鏈表,請設計一個時間復雜度為O(n),額外空間復雜度為O(1)的算法,判斷其是否為回文結構。
給定一個鏈表的頭指針A,請返回一個bool值,代表其是否為回文結構。保證鏈表長度小于等于900。

2.2 解題思路

思路1:

存儲到數組,再創建兩個計數變量分別從前向后和從后向前進行遍歷來進行回文判斷。

時間復雜度:O(N),空間復雜度:O(N)(不符合要求);

思路2:(本題解法)

第一步:定位鏈表的中間結點;

第二步:從中間結點開始,將鏈表的后半段逆置;

第三步:創建兩個指針,一個指向鏈表第一個結點,一個指向鏈表的中間結點,兩個同時向后走;

對于偶數個結點的鏈表,直至其中一個指針指向空即可對應匹配結束:

對于奇數個結點的鏈表,由于逆置的后半段鏈表并不影響原鏈表中間結點的的本來指向,未逆置的前半段鏈表的最后一個結點的指向其實還是指向原鏈表的結點,最終比較也是奇數個結點鏈表的中間結點的自我比較,匹配結束標志仍是任意一個指針指向空:

2.3 程序

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};*/
using ListNode = struct ListNode;
class PalindromeList {public:// 查找中間結點struct ListNode* middleNode(struct ListNode* head) {ListNode* slow = head;ListNode* fast = head;while (fast != NULL && fast->next != NULL) {fast = fast->next->next;slow = slow->next;}return slow;}// 逆置鏈表struct ListNode* reverseList(struct ListNode* head) {// 判空if (head == NULL) {return head;}// 創建三個指針ListNode* n1 = NULL;ListNode* n2 = head;ListNode* n3 = n2->next;while (n2) {n2->next = n1;n1 = n2;n2 = n3;if (n3)n3 = n3->next;}return n1;}// 判斷回文bool chkPalindrome(ListNode* A) {// 查找中間鏈表ListNode* midNode=middleNode(A);// 逆置后半段鏈表ListNode* remidNode=reverseList(midNode);while(remidNode && A){if(remidNode->val != A->val){return false;}remidNode=remidNode->next;A=A->next;}return true;}
};

注:關于查找單鏈表中間結點、逆置鏈表的實現,在OJ相關文章有詳解,文章鏈接如下:

【數據結構】_鏈表經典算法OJ(力扣版)-CSDN博客文章瀏覽閱讀1.3k次,點贊33次,收藏21次。4、考慮特殊情況及相應處理:(1)原鏈表為空:即head=NULL,導致curNode=NULL,不會進入第一個while循環,但在newTail->next=NULL 時會導致空指針解引用操作,出現錯誤。故需對newTail是否為空進行單獨討論處理。(2)新鏈表為空:即原鏈表所有結點數據域的值都等于val,導致newTail->next=NULL 時會導致空指針解引用操作,出現錯誤。同(1):需對newTail是否為空進行單獨討論處理。處理邏輯為:https://blog.csdn.net/m0_63299495/article/details/145355272https://blog.csdn.net/m0_63299495/article/details/145355272

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

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

相關文章

pytorch基于 Transformer 預訓練模型的方法實現詞嵌入(tiansz/bert-base-chinese)

以下是一個完整的詞嵌入(Word Embedding)示例代碼,使用 modelscope 下載 tiansz/bert-base-chinese 模型,并通過 transformers 加載模型,獲取中文句子的詞嵌入。 from modelscope.hub.snapshot_download import snaps…

爬蟲基礎之爬取某站視頻

目標網址:為了1/4螺口買小米SU7,開了一個月,它值嗎?_嗶哩嗶哩_bilibili 本案例所使用到的模塊 requests (發送HTTP請求)subprocess(執行系統命令)re (正則表達式操作)json (處理JSON數據) 需求分析: 視頻的名稱 F12 打開開發者工具 or 右擊…

DeepSeek R1本地化部署 Ollama + Chatbox 打造最強 AI 工具

🌈 個人主頁:Zfox_ 🔥 系列專欄:Linux 目錄 一:🔥 Ollama 🦋 下載 Ollama🦋 選擇模型🦋 運行模型🦋 使用 && 測試 二:🔥 Chat…

【linux網絡(5)】傳輸層協議詳解(下)

目錄 前言1. TCP的超時重傳機制2. TCP的流量控制機制3. TCP的滑動窗口機制4. TCP的擁塞控制機制5. TCP的延遲應答機制6. TCP的捎帶應答機制7. 總結以及思考 前言 強烈建議先看傳輸層協議詳解(上)后再看這篇文章. 上一篇文章講到TCP協議為了保證可靠性而做的一些策略, 這篇文章…

DeepSeek 遭 DDoS 攻擊背后:DDoS 攻擊的 “千層套路” 與安全防御 “金鐘罩”

當算力博弈升級為網絡戰爭:拆解DDoS攻擊背后的技術攻防戰——從DeepSeek遇襲看全球網絡安全新趨勢 在數字化浪潮席卷全球的當下,網絡已然成為人類社會運轉的關鍵基礎設施,深刻融入經濟、生活、政務等各個領域。從金融交易的實時清算&#xf…

二、CSS筆記

(一)css概述 1、定義 CSS是Cascading Style Sheets的簡稱,中文稱為層疊樣式表,用來控制網頁數據的表現,可以使網頁的表現與數據內容分離。 2、要點 怎么找到標簽怎么操作標簽對象(element) 3、css的四種引入方式 3.1 行內式 在標簽的style屬性中設定CSS樣式。這種方…

第三篇:模型壓縮與量化技術——DeepSeek如何在邊緣側突破“小而強”的算力困局

——從算法到芯片的全棧式優化實踐 隨著AI應用向移動終端與物聯網設備滲透,模型輕量化成為行業核心挑戰。DeepSeek通過自研的“算法-編譯-硬件”協同優化體系,在保持模型性能的前提下,實現參數量與能耗的指數級壓縮。本文從技術原理、工程實…

C++編程語言:抽象機制:泛型編程(Bjarne Stroustrup)

泛型編程(Generic Programming) 目錄 24.1 引言(Introduction) 24.2 算法和(通用性的)提升(Algorithms and Lifting) 24.3 概念(此指模板參數的插件)(Concepts) 24.3.1 發現插件集(Discovering a Concept) 24.3.2 概念與約束(Concepts and Constraints) 24.4 具體化…

DeepSeek-R1本地部署實踐

一、下載安裝 --Ollama Ollama是一個開源的 LLM(大型語言模型)服務工具,用于簡化在本地運行大語言模型,降低使用大語言模型的門檻,使得大模型的開發者、研究人員和愛好者能夠在本地環境快速實驗、管理和部署最新大語言…

AI技術路線(marked)

人工智能(AI)是一個非常廣泛且充滿潛力的領域,它涉及了讓計算機能夠執行通常需要人類智能的任務,比如感知、推理、學習、決策等。人工智能的應用已經滲透到各行各業,從自動駕駛到醫療診斷,再到推薦系統和自…

【leetcode詳解】T598 區間加法

598. 區間加法 II - 力扣(LeetCode) 思路分析 核心在于將問題轉化, 題目不是要求最大整數本身,而是要求解最大整數的個數 結合矩陣元素的增加原理,我們將抽象問題轉為可操作的方法,其實就是再找每組ops中…

【最后203篇系列】004 -Smarklink

說明 這個用來替代nginx。 最初是希望用nginx進行故障檢測和負載均衡,花了很多時間,大致的結論是:nginx可以實現,但是是在商業版里。非得要找替代肯定可以搞出來,但是太麻煩了(即使是nginx本身的配置也很煩…

完全卸載mysql server步驟

1. 在控制面板中卸載mysql 2. 打開注冊表,運行regedit, 刪除mysql信息 HKEY_LOCAL_MACHINE-> SYSTEM->CurrentContolSet->Services->EventLog->Application->Mysql HKEY_LOCAL_MACHINE-> SYSTEM->CurrentContolSet->Services->Mysql …

1. 【.NET Aspire 從入門到實戰】--理論入門與環境搭建--引言

在當前軟件開發領域,云原生和微服務架構已經成為主流趨勢,傳統的單體應用正逐步向分布式系統轉型。隨著業務需求的不斷變化與用戶規模的迅速擴大,如何在保證高可用、高擴展性的同時,還能提高開發效率與降低維護成本,成…

Ubuntu 22.04系統安裝部署Kubernetes v1.29.13集群

Ubuntu 22.04系統安裝部署Kubernetes v1.29.13集群 簡介Kubernetes 的工作流程概述Kubernetes v1.29.13 版本Ubuntu 22.04 系統安裝部署 Kubernetes v1.29.13 集群 1 環境準備1.1 集群IP規劃1.2 初始化步驟(各個節點都需執行)1.2.1 主機名與IP地址解析1.…

基于SpringBoot的新聞資訊系統的設計與實現(源碼+SQL腳本+LW+部署講解等)

專注于大學生項目實戰開發,講解,畢業答疑輔導,歡迎高校老師/同行前輩交流合作?。 技術范圍:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容:…

每日一題——包含min函數的棧

包含min函數的棧 題目數據范圍:示例C語言代碼實現解釋1. push(value)2. pop()3. top()4. min() 總結大小堆 題目 定義棧的數據結構,請在該類型中實現一個能夠得到棧中所含最小元素的 min 函數,輸入操作時保證 pop、top 和 min 函數操作時&am…

RDP協議詳解

以下內容包含對 RDP(Remote Desktop Protocol,遠程桌面協議)及其開源實現 FreeRDP 的較為系統、深入的講解,涵蓋協議概要、歷史沿革、核心原理、安全機制、安裝與使用方法、擴展與未來發展趨勢等方面, --- ## 一、引…

【Linux系統】計算機世界的基石:馮諾依曼架構與操作系統設計

文章目錄 一.馮諾依曼體系結構1.1 為什么體系結構中要存在內存?1.2 馮諾依曼瓶頸 二.操作系統2.1 設計目的2.2 系統調用與庫函數 一.馮諾依曼體系結構 馮諾依曼體系結構(Von Neumann Architecture)是計算機的基本設計理念之一,由…

消息隊列應用示例MessageQueues-STM32CubeMX-FreeRTOS《嵌入式系統設計》P343-P347

消息隊列 使用信號量、事件標志組和線標志進行任務同步時,只能提供同步的時刻信息,無法在任務之間進行數據傳輸。要實現任務間的數據傳輸,一般使用兩種方式: 1. 全局變量 在 RTOS 中使用全局變量時,必須保證每個任務…