單鏈表專題---暴力算法美學(1)(有視頻演示)

1.1 移除鏈表元素

題目要求:給你一個鏈表的頭節點head 和一個整數val,請你刪除鏈表中所有滿足Node.val == val 的節點,并返回新的頭節點。

思路一:遍歷鏈表,遇到val就刪除,pcur指向val的下一個節點,最后只剩下沒有val的鏈表。

思路二:創建新的鏈表,頭節點用newHead,尾插newTail,pcur來遍歷原鏈表,當pcur!=val,就把數值拿下來,尾插到newTail中,最后新的鏈表中沒有val。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val)//指向頭節點的指針,要刪除的數值
{//創建一個新鏈表ListNode* newHead, *newTail;newHead = newTail = NULL;//遍歷原鏈表ListNode* pcur = head;while (pcur)//pcur!=NULL{//找值不為val的節點,尾插到新鏈表中if (pcur->val != val){//當鏈表為空時if (newHead == NULL){newHead = newTail = pcur;}else//鏈表不為空{newTail->next = pcur;//將pcur的值插入newTail的下一個節點newTail = newTail->next;//最后讓newTail走向下一個節點}pcur = pcur->next;}}if (newTail)//newTail!=NULLnewTail->next = NULL;return newHead;
}

1.2 反轉鏈表

思路一:創建新的鏈表,將原鏈表中的節點拿過來頭插。

思路二:創建三個指針,完成鏈表的翻轉。

//反轉鏈表
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/typedef struct ListNode ListNode;
struct ListNode* reverseList(struct ListNode* head) {//判斷鏈表是否為空if(head==NULL)return head;ListNode* n1,*n2,*n3;//創建三個指針實現反轉//介紹三個指針分別在什么地方n1 = NULL, n2 = head, n3 = n2->next;while(n2)//判斷結束節點,n2!=NULL{n2->next=n1;n1=n2;n2=n3;if(n3)n3=n3->next;}return n1;//n1是鏈表新的頭節點
}

反轉鏈表算法題思路

1.3 鏈表的中間節點

思路一:遍歷原鏈表,count計節點數,直接返回(count / 2)節點的next節點

思路二:快慢指針

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/typedef struct ListNode ListNode;
struct ListNode* middleNode(struct ListNode* head) {//創建兩個指針ListNode* fast,* slow;fast=head;slow=head;//兩個創建的指針都指向head頭節點while(fast && fast->next)//偶數鏈表遍歷結束條件fast=NULL,奇數鏈表遍歷結束條件fast->next=NULL{slow=slow->next;fast=fast->next->next;}return slow;
}

問題:while(fast->next && fast)可以交換位置嗎?

不可以!若鏈表有偶數個節點的情況下,fast最后一次會直接走到空,fast->next會執行報錯!

鏈表的中間節點的思路二:快慢指針

1.3.1拓展提升:刪除鏈表的中間節點

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/typedef struct ListNode ListNode;
struct ListNode* deleteMiddle(struct ListNode* head) {struct ListNode* slow, *fast, *dummy, *tmp;dummy=(struct ListNode*)malloc(sizeof( ListNode));dummy->next=head;slow = fast = dummy;while(fast->next != NULL && fast->next->next != NULL) {slow = slow->next;fast = fast->next->next;}tmp = slow->next;slow->next = tmp->next;free(tmp);return dummy->next;
}

問題:為什么要額外申請一個空間放置dummy,dummy->next=head,頭節點head本身就是存在的,為什么要有一個dummy來指向head?

答: dummy(虛擬頭節點)使用來簡化邊界情況處理的“工具人”。如果鏈表只有一個節點,這個唯一節點就是“中間節點”,需要被刪除,如果沒有dummy,直接刪除head,結果會返回NULL,而dummy->next永遠指向實際鏈表的頭節點,不管頭節點有沒有被刪除,最后返回的都是dummy->next,不用單獨處理頭節點被刪除導致head無效的情況。

刪除鏈表的中間元素解題思路

博主的下一篇博客:單鏈表專題---暴力算法美學(2)(有視頻演示)-CSDN博客

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

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

相關文章

機器學習-決策樹(DecisionTree)

0 回歸決策樹展示 import pandas as pd import numpy as np from sklearn.tree import DecisionTreeRegressor from sklearn.metrics import root_mean_squared_error, r2_score from sklearn.model_selection import GridSearchCV,KFold from sklearn.model_selection import…

【Java Web】JDBC 連接 MySQL 實現數據庫 CRUD(增刪改查)詳解

在 Java Web 開發中,與數據庫交互是不可避免的,而 JDBC(Java Database Connectivity) 是 Java 官方提供的標準數據庫連接接口,幾乎所有 Java 項目中都用過它。 本文通過一個完整示例,帶你從零實現 增&#…

HTTP 請求返回狀態碼和具體含義?200、400、403、404、502、503、504等

HTTP 狀態碼是服務器對客戶端請求的響應狀態標識,分為五大類(以第一位數字區分),常用狀態碼如下: 1. 信息類(1xx):請求已接收,繼續處理 100 Continue:服務器已…

13-netty基礎-手寫rpc-消費方生成代理-05

netty系列文章: 01-netty基礎-socket02-netty基礎-java四種IO模型03-netty基礎-多路復用select、poll、epoll04-netty基礎-Reactor三種模型05-netty基礎-ByteBuf數據結構06-netty基礎-編碼解碼07-netty基礎-自定義編解碼器08-netty基礎-自定義序列化和反序列化09-n…

ThreadLocal有哪些內存泄露問題,如何避免?

每個Thread都有一個ThreadLocal.ThreadLocalMap的map,該map的key為ThreadLocal實例,它為一個弱引 用,我們知道弱引用有利于GC回收。當ThreadLocal的key null時,GC就會回收這部分空間,但是value卻不一 定能夠被回收&am…

從0到1學LangChain之Agent代理:解鎖大模型應用新姿勢

從0到1學LangChain之Agent代理&#xff1a;解鎖大模型應用新姿勢 本文較長&#xff0c;建議點贊收藏&#xff0c;以免遺失。更多AI大模型開發 學習視頻/籽料/面試題 都在這>>Github<< 什么是 LangChain Agent 代理 如果把大模型比作一個超級大腦&#xff0c;那么…

Spring Boot 2.6.0+ 循環依賴問題及解決方案

Spring Boot 2.6.0 循環依賴問題及解決方案 目錄 背景解決方案 1. 配置文件開啟循環依賴&#xff08;侵入性最低&#xff0c;臨時方案&#xff09;2. Lazy 延遲注入&#xff08;侵入性低&#xff0c;推薦優先嘗試&#xff09;3. 手動從容器獲取&#xff08;ApplicationContex…

本地代碼上傳Github步驟

1.注冊Github賬號 2.下載git客戶端 下載、安裝步驟可以參考網站&#xff1a;(6 封私信 / 10 條消息) 手把手教你用git上傳項目到GitHub&#xff08;圖文并茂&#xff0c;這一篇就夠了&#xff09;&#xff0c;相信你一定能成功&#xff01;&#xff01; - 知乎 3.在Github上…

5G NR 非地面網絡 (NTN) 5G、太空和統一網絡

非地面網絡 5G 和太空&#xff1a;對 NTN 測試與測量的影響NTN 基站測試與測量NTN 用戶設備的測試設備R&SSMW200A 矢量信號發生器R&SSMBV100B 矢量信號發生器總結5G 和太空&#xff1a;對 NTN 測試與測量的影響 5G 非地面網絡 (NTN) 是無線通信向全球性星基和機載通信…

少兒編程比賽(如藍橋杯、創意編程大賽等)的題目類型、知識點及難度總結

以下是針對主流少兒編程比賽&#xff08;如藍橋杯、創意編程大賽等&#xff09;的題目類型、知識點及難度總結&#xff0c;結合了Scratch和C等語言的真題分析&#xff0c;幫助備賽或教學參考&#xff1a; 一、基礎操作與交互題&#xff08;適合6~10歲&#xff09; 考察圖形化編…

SIFThinker: Spatially-Aware Image Focus for Visual Reasoning

SIFThinker: Spatially-Aware Image Focus for Visual Reasoning Authors: Zhangquan Chen, Ruihui Zhao, Chuwei Luo, Mingze Sun, Xinlei Yu, Yangyang Kang, Ruqi Huang 相關工作總結 視覺思維鏈推理 最近的研究表明&#xff0c;通過上下文學習逐步推理可以顯著提升大型…

學習嵌入式第二十五天

IO 1.概念 IO指input/outputLinux中一切皆文件IO的操作對象是文件 2.文件一段數據的集合文件通常存放在外存中&#xff0c;掉電后數據不丟失分類b(block&#xff0c;塊設備文件) 按塊掃描信息的文件。通常存儲類型的設備為塊設備文件。文件IOc(character&#xff0c;字符設備文…

本地部署接入 whisper + ollama qwen3:14b 總結字幕

1. 實現功能 M4-1 接入 whisper ollama qwen3:14b 總結字幕 自動下載視頻元數據如果有字幕&#xff0c;只下載字幕使用 ollama 的 qwen3:14b 對字幕內容進行總結 2.運行效果 &#x1f50d; 正在提取視頻元數據… &#x1f4dd; 正在下載所有可用字幕… [youtube] Extracting U…

【13-向量化-高效計算】

研究者能夠擴展神經網絡并構建非常大型網絡的原因之一&#xff0c;就是神經網絡可以被向量化&#xff0c;vectorized&#xff1b;可以非常高效地用矩陣地乘法實現。 事實上&#xff0c;并行計算硬件&#xff0c;例如GPU&#xff0c;一些CPU的功能&#xff0c;非常擅長進行非常大…

論文中PDF的公式如何提取-公式提取

Mathcheap - An AI-powered, free alternative to Mathpix Snip. 從PDF中截圖公式&#xff0c;之后 ctrl V 轉換成功 &#xff0c;提取成功 復制到word中&#xff0c;是這樣的 這顯然不是我們需要的。 可以使用Axmath 復制進去Axmath 就能正常顯示公式。 之后再插入word…

用 Flink SQL 和 Paimon 打造實時數倉:深度解析與實踐指南

1. 實時數倉的魅力&#xff1a;從離線到分鐘級的飛躍實時數倉&#xff0c;聽起來是不是有點高大上&#xff1f;其實它沒那么神秘&#xff0c;但確實能讓你的數據處理能力像坐上火箭一樣飆升&#xff01;傳統的離線數倉&#xff0c;像 Hadoop 生態的 Hive&#xff0c;動輒小時級…

【已解決】報錯:WARNING: pip is configured with locations that require TLS/SSL

一、問題背景二、問題分析1. SSL模塊缺失的本質2. Anaconda環境特點三、問題表現四、解決方案詳解1. 完整配置環境變量2. 添加環境變量的步驟3. 測試驗證五、實戰示例六、附加建議七、總結八、參考鏈接一、問題背景 在Windows 10系統中使用Python的包管理工具pip時&#xff0c…

Java項目基本流程(三)

一、頁面初始化階段&#xff08;加載即執行&#xff09;加載欄目列表&#xff08;同步請求&#xff09;發送同步 AJAX 請求到SearchChannel接口&#xff0c;獲取所有欄目數據。清空下拉框&#xff08;.channelid&#xff09;后&#xff0c;先添加 “全部” 選項&#xff0c;再循…

鷓鴣云光伏仿真:項目前期決策的“數據明燈”

曾有一處光伏項目&#xff0c;在精心籌備數月后終于建成&#xff0c;卻在運行初期即因未充分評估山體遮擋影響&#xff0c;導致實際發電量較預期大幅降低近一成。前期決策中的微小疏漏&#xff0c;往往成為項目經濟性與可行性的致命傷。而鷓鴣云光伏仿真軟件正是一盞照亮前路的…

開發指南129-基礎類-BaseController

所有接口都需要繼承BaseControllerBaseController里有很多有用的方法&#xff0c;現舉例最重要的幾個&#xff1a;1、getURI返回接口地址&#xff0c;就是PostMapping或GetMapping中定義的接口地址。常用于返回值中&#xff0c;例如接口的異常處理&#xff1a;try {// 處理邏輯…