【代碼隨想錄37期】Day04 兩兩交換鏈表中的節點、刪除鏈表的倒數第N個節點、鏈表相交、環形鏈表II

兩兩交換鏈表中的節點

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* swapPairs(ListNode* head) {ListNode *dummyHead = new ListNode(0);dummyHead->next = head;ListNode *cur = dummyHead; while(cur->next&&cur->next->next){ListNode* tmp = cur->next; // 記錄臨時節點ListNode* tmp1 = cur->next->next->next; // 記錄臨時節點cur->next = cur->next->next;    // 步驟一cur->next->next = tmp;          // 步驟二cur->next->next->next = tmp1;   // 步驟三cur = cur->next->next; // cur移動兩位,準備下一輪交換}return  dummyHead->next;}
};

刪除鏈表的倒數第N個節點

注意使用虛擬頭節點,可以避免對頭節點的判斷,防止各種復雜情況

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* dummyHead = new ListNode(0);dummyHead->next = head;ListNode* slow = dummyHead;ListNode* fast = dummyHead;while(n--&&fast){fast = fast->next;}fast = fast->next;while(fast){fast = fast->next;slow = slow->next;}slow->next = slow->next->next;return dummyHead->next;}
};
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* dummyHead = new ListNode(0);dummyHead->next = head;ListNode* slow = dummyHead;ListNode* fast = dummyHead;while(n--&&fast){fast = fast->next;}fast = fast->next;while(fast){fast = fast->next;slow = slow->next;}slow->next = slow->next->next;return dummyHead->next;}
};
if(head->next==nullptr)return nullptr;ListNode* slow = head;ListNode* fast = head;while(n--&&fast!=nullptr){fast = fast->next;}fast = fast->next;while(fast){slow = slow->next;fast = fast->next;}slow->next= slow->next->next;return head;

鏈表相交

代碼隨想錄

面試題 02.07. 鏈表相交 - 力扣(LeetCode)

v1.0:感覺使用了虛擬頭節點之后很順利,直接模擬就可以寫出來,不過就是感覺寫的有點長?
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode *dummyHeadA = new ListNode(0);ListNode *dummyHeadB = new ListNode(0);int lengthA = 0, lengthB = 0;dummyHeadA->next = headA;dummyHeadB->next = headB;ListNode *lna = dummyHeadA;ListNode *lnb = dummyHeadB;while(lna){lengthA++;lna = lna->next;}while(lnb){lengthB++;lnb = lnb->next;}int steps = 0;lna = dummyHeadA;lnb = dummyHeadB;if(lengthA>=lengthB){steps = lengthA - lengthB;while(steps--){lna = lna->next;}while(lna->next!=lnb->next){lna = lna->next;lnb = lnb->next;}if(lna->next==nullptr){return nullptr;}else{return lna->next;}}else{steps = lengthB - lengthA;while(steps--){lnb = lnb->next;}while(lna->next!=lnb->next){lna = lna->next;lnb = lnb->next;}if(lna->next==nullptr){return nullptr;}else{return lna->next;}}}
};

環形鏈表Ⅱ

142. 環形鏈表 II - 力扣(LeetCode)

v1.0 這道題很巧妙,是看了隨想錄的講解才做出來的
1. 判斷有無環:定義快慢指針,快指針一次走兩個節點,慢指針走一個,快指針追上慢指針說明有環
2. 追上時需要紙筆列下式子,此時快慢指針走過的節點數量,然后要求的是從開始節點到進入環的節點的長度
3. 具體推導可以看隨想錄,總之就是需要列一下式子就可以找出關系了~
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode *detectCycle(ListNode *head) {ListNode *dummyHead = new ListNode(0);dummyHead->next = head;ListNode *fast = head;ListNode *slow = head;ListNode *aux = head;while(fast&&fast->next){fast= fast->next->next;slow = slow->next;if(fast==slow){while(aux!=slow){slow=slow->next;aux=aux->next;}return aux;}}return nullptr;}
};

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

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

相關文章

光通信行業專業術語解析大全

近期公司內部開展了一期學習交流會,各位同事收獲頗多,特別是關于一些專業術語的簡稱,大家都覺得非常有意思!小編馬不停蹄的整理出來分享給大家,希望可以給學習光通信知識的萌新們小小助力! 以下是光通信行…

QRegExp

描述 QRegExp 類使用正則表達式提供模式匹配。 正則表達式或“正則表達式”是一種用于匹配文本中子字符串的模式。這在許多情況下都很有用,例如, 驗證 正則表達式可以測試子字符串是否滿足某些條件,例如是整數或不包含空格。搜索 正則表達式…

網關路由的方式有哪些

在微服務架構中,網關路由通常用于集中處理請求分發、認證、限流、熔斷等任務。以下是幾種常見的網關路由配置方式: Spring Cloud Gateway 1. **基于配置文件的路由**: - 在Spring Cloud Gateway中,可以通過YAML或JSON配置文件定…

【Linux】shell編程,()圓括號, []方括號, {}花括號與(())雙括號的使用區別

1. ( )圓括號 初始化數組使用圓括號; 命令組,將一系列命令用空格隔開; 命令替換,使用$ 美元符,將命令進行嵌套使用;(有點兒類似于管道符作用的感覺) arr(1 2 3 4 5)2. [ ]方括號 …

【Linux】搭建私有yum倉庫(類阿里云)

在搭建本地yum倉庫并配置國內鏡像阿里云源中了解yum源 yum : Yellow dog Updater,Modified,是一種基于rpm包的自動升級和軟件包管理工具。yum能從指定的服務器自動下載rpm包并安裝,自動計算出程序之間的依賴關系和軟件安裝的步驟&…

《Python編程從入門到實踐》day25

# 昨日知識點回顧 如何創建多行外星人 碰撞結束游戲 創建game_stats.py跟蹤統計信息 # 今日知識點學習 第14章 記分 14.1 添加Play按鈕 14.1.1 創建Button類 import pygame.font# button.py class Button:def __init__(self, ai_game, msg):"""初始化按鈕…

【Python系列】Python中列表屬性提取

💝💝💝歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

地下工程中測斜儀的關鍵應用

地下工程,如隧道、地鐵和基坑等項目的建設,對于現代城市的發展至關重要。然而,這些工程的實施往往伴隨著諸多風險,特別是與周圍土體的穩定性有關的風險。為了確保工程的安全進行,實時監測技術變得尤為關鍵。其中&#…

vue3專欄項目 -- 三、使用vue-router 和 vuex(下)

一、添加columnDetail 頁面 首頁有專欄列表(ColumnList組件),專欄列表中有很多專欄,然后點擊某個專欄就進入專欄詳情頁(ColumnDetail組件),專欄詳情頁中有很多文章,點擊某個文章就進…

經開區創維汽車車輛交接儀式順利舉行,守護綠色出行助力低碳發展

5月10日,“創維新能源汽車進機關”交車儀式于徐州順利舉行,20輛創維EV6 II正式交付經開區政府投入使用。經開區陳琳副書記、黨政辦公室副主任張馳主任、經開區公車管理平臺苑忠民科長、創維汽車總裁、聯合創始人吳龍八先生、創維汽車營銷公司總經理饒總先…

配置管理與IT資產管理:差異與協同共生

在信息技術日新月異的今天,高效、可靠的IT服務管理成為企業競爭力的關鍵一環。ITIL4 作為業界公認的IT服務管理框架,為我們提供了一套全面而系統的實踐指南。在這一框架下,配置管理和IT資產管理作為兩大核心實踐,雖各有側重&#…

線路和繞組中的波過程(三)

本篇為本科課程《高電壓工程基礎》的筆記。 本篇為這一單元的第三篇筆記。上一篇傳送門。 沖擊電暈對線路上波過程的影響 實際中的導線存在電阻,而且還有對地電導,會消耗一部分能量。但是因為雷擊所涉及的傳輸距離很短,所以幾乎可以忽略這…

深入解析RedisSearch:全文搜索的新維度

碼到三十五 : 個人主頁 在當今的數據時代,信息的檢索與快速定位變得尤為關鍵。Redis,作為一個高性能的內存數據庫,已經在緩存和消息系統中占據了重要地位。然而,Redis并不直接支持復雜的搜索功能。為了填補這一空白&am…

【計算機網絡】計算機網絡概述、計算機網絡性能指標 習題1

0 1. 計算機網絡可被理解為( )。 A.執行計算機數據處理的軟件模塊 B. 由自治的計算機互連起來的集合體 C.多個處理器通過共享內存實現的緊耦合系統 D. 用于共同完成一項任務的分布式系統 0 2.計算機網絡最基本的功能是( )。 A.數據通信 B. 資源共享 C. 分布式處理 D. 信息綜合…

python的deap庫使用記錄

主要是在遺傳符號回歸的代碼中添加了注釋和根據一部分源碼做了一點改動 import operator import random import numpy as np import matplotlib.pyplot as plt from deap import algorithms, base, creator, tools, gp from operator import attrgetter##生成數據 def generat…

【Python系列】字節串與字典字節串

💝💝💝歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

ASP.NET WebApi 如何使用 OAuth2.0 認證

前言 OAuth 2.0 是一種開放標準的授權框架,用于授權第三方應用程序訪問受保護資源的流程。 OAuth 2.0 認證是指在這個框架下進行的身份驗證和授權過程。 在 OAuth 2.0 認證中,涉及以下主要參與方: 資源所有者(Resource Owner&…

【.NET Cote】你真的了解HttpRuntime類嗎

【.NET Cote】你真的了解HttpRuntime類嗎 文章目錄 【.NET Cote】你真的了解HttpRuntime類嗎一、HttpRuntime概述二、HttpRuntime是什么包三、HttpRuntime屬性四、HttpRuntime方法五、HttpRuntime.Cache方法六、HttpRuntime.Cache應用 一、HttpRuntime概述 C# HttpRuntime是一…

JAVA基礎之下載,socket實現網絡聊天

目錄 一、如何利用正則表達式找到img標簽 compile編譯編制 二、下載圖片的方法 三、socket實現網絡聊天 1.inputStreamReader 字節的讀取流--->字符的讀取流 2.outputStreamWriter 字節的寫入流--->字符的寫入流 一、如何利用正則表達式找到img標簽 compile編譯編制…

antd組件狀態變換為啥要使用剪頭函數

先看下代碼 import React, {useState} from react; import {Switch, Typography} from antd;const {Paragraph, Text} Typography;const App: React.FC () > { const [ellipsis, setEllipsis] useState(true);return (<>//正確的<Switch checked{ellipsis}onCh…