常見算法解法——鏈表篇

鏈表

鏈表中每一個節點為一個對象,對象中包含兩個成員變量,第一個是val,代表鏈表的值,第二個是next,它指向下一個節點,是下一個節點對象的引用。

定義鏈表

class ListNode:def __init__(self, x):self.val = xself.next = None

刪除節點

給定鏈表中的某個節點,刪除該節點

class Solution {public void deleteNode(ListNode node) {node.val = node.next.val;node.next = node.next.next;}
}

反轉鏈表

普通方法:

def reverseList(head: Optional[ListNode]) -> Optional[ListNode]:newHead = Nonewhile head != None:temp = head.nexthead.next = newHeadnewHead = headhead = tempreturn newHead

使用棧解決:
一定要注意讓尾巴節點next指針為空,否則將形成環:

def reverseList(head: Optional[ListNode]) -> Optional[ListNode]:if head == None:return Nonea = []while head != None:a.append(head)head = head.nexthead = a.pop()b = headwhile len(a) > 0:n = a.pop()b.next = nb = nb.next = Nonereturn head

合并兩個有序鏈表

合并兩個升序鏈表,變成一個新的升序鏈表

遞歸:

def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:if list1 is None: return list2if list2 is None: return list1if list1.val <= list2.val:list1.next = self.mergeTwoLists(list1.next, list2)return list1else:list2.next = self.mergeTwoLists(list1,list2.next)return list2

判斷鏈表是否有環

直觀解法:

class Solution:def hasCycle(self, head: Optional[ListNode]) -> bool:a = []while head != None:if head not in a:a.append(head)head = head.nextelse:return Truereturn False

快慢指針:

class Solution:def hasCycle(self, head: Optional[ListNode]) -> bool:head1 = headhead2 = headwhile head1 != None and head2 != None and head2.next != None:head1 = head1.nexthead2 = head2.next.nextif head1 == head2:return Truereturn False

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

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

相關文章

玩主機游戲能省去不少煩惱?+主機該購買哪臺?

文/嘉蘭SK 來到次世代&#xff0c;玩家們最關心的問題逐漸變成了購買的游戲能否支持升級。 各個游戲廠商也沒有閑著。 此前還有標準版、黃金版、終極版、決定版等一系列。 想出很多招數。 于是很多新玩家開始疑惑&#xff1a;你們都說玩主機游戲可以省去很多麻煩&#xff0c;可…

每天一個知識點 - 如何快速熟悉后端項目

入職一家新公司的時候&#xff0c;不可避免的就是接觸到新公司的項目&#xff0c;有些項目一啟動就是好幾年&#xff0c;業務功能極其復雜&#xff0c;下面我總結幾個方法讓大家快速熟悉后端項目&#xff08;圖文結合&#xff09; 用例圖簡析 用例是系統中的一個功能單元&…

【機器學習】機器學習是什么?

機器學習是一種人工智能領域的技術&#xff0c;旨在使機器能夠通過數據和經驗來自動學習和改進。它通過構建和訓練模型&#xff0c;使機器能夠從輸入數據中提取規律和模式&#xff0c;并根據這些規律和模式做出預測或者決策。 機器學習的核心思想是讓機器通過大量的數據進行學…

springboot網站開發02-接入持久層框架mybatisPlus

springboot網站開發02-接入持久層框架mybatisPlus&#xff01;經過上一小節內容分享&#xff0c;我們的項目嵌套模式框架搭建好了&#xff0c;下面就是開始編輯具體的業務代碼了&#xff0c;我們使用到了持久層框架是mybatisPlus插件。下面是一些具體的植入框架的操作步驟。 第…

Python 光速入門課程

首先說一下&#xff0c;為啥小編在即PHP和Golang之后&#xff0c;為啥又要整Python&#xff0c;那是因為小編最近又拿起了 " 阿里天池 " 的東西&#xff0c;所以小編又不得不撿起來大概五年前學習的Python&#xff0c;本篇文章主要講的是最基礎版本&#xff0c;所以比…

DT DAY3 信號和槽

作業&#xff1a; 1> 思維導圖 2> 使用手動連接&#xff0c;將登錄框中的取消按鈕使用qt4版本的連接到自定義的槽函數中&#xff0c;在自定義的槽函數中調用關閉函數 btn3 new QPushButton("按鈕3",this);btn3->resize(ui->btn2->width(),ui->b…

研發流程圖

1、需求評審流程 2、用例評審流程 3、代碼評審流程 4、產品功能上線流程

排序算法整理

排序種類排序特性代碼背景 基于插入的排序直接插入排序原理代碼 折半查找排序2路查找排序希爾排序(shell) 縮小增量排序原理代碼 基于交換的排序冒泡排序原理代碼 快速排序&#xff08;重要!&#xff09;原理我的思考 代碼 基于選擇的排序&#xff08;簡單&#xff09;選擇排序…

雙向鏈表的操作(C語言)

main函數部分&#xff1a; #include <stdio.h> #include "./23_doubleLinkList.h" int main(int argc, const char *argv[]) { doubleLinkList* head create_doubleLinkList();insertHead_doubleLinkList(head,12);insertHead_doubleLinkList(head,21);inse…

Spark之【基礎介紹】

Spark最初是由美國伯克利大學AMP實驗室在2009年開發&#xff0c;Spark時基于內存計算的大數據并行計算框架&#xff0c;可以用于構建大型的、低延遲的數據分析應用程序。 Spark是當今大數據領域最活躍、最熱門、最高效的大數據通用計算平臺之一。 Spark的特點 運行速度快 &am…

Uniapp + VUE3.0 實現雙向滑塊視頻裁剪效果

效果圖 <template><view v-if"info" class"all"><video:src"info.videoUrl"class"video" id"video" :controls"true" object-fit"fill" :show-fullscreen-btn"false"play-btn…

網頁數據的解析提取(parsel的使用)

前面&#xff0c;我們已經介紹了Xpath庫和Beautiful Soup庫&#xff08;支持css選擇器&#xff09;來提取頁面信息。它們有各自的優缺點&#xff0c;那可不可以取長補短呢&#xff1f;當然可以&#xff0c;parsel庫就是結合Xpath和css選擇器兩種方式來提取網頁信息。同時&#…

sylar高性能服務器-日志(P30-P35)內容記錄

文章目錄 P30-P32&#xff1a;協程調度01-03一、Scheduler局部變量FiberAndThread&#xff08;任務結構體&#xff09;成員變量調度協程構造函數析構函數startstoprunstopping 二、參考資料 P33-P35&#xff1a;協程調度04-06一、測試1二、測試2 總結 P30-P32&#xff1a;協程調…

開源博客項目Blog .NET Core源碼學習(9:Autofac使用淺析)

開源博客項目Blog使用Autofac注冊并管理組件和服務&#xff0c;Autofac是面向.net 的開源IOC容器&#xff0c;支持通過接口、實例、程序集等方式注冊組件和服務&#xff0c;同時支持屬性注入、方法注入等注入方式。本文學習并記錄Blog項目中Autofac的使用方式。 ??整個Blog解…

Swift基礎知識:28.Swift協議

在 Swift 中&#xff0c;協議&#xff08;protocol&#xff09;是一種定義方法、屬性和其他特定任務的藍圖。類、結構體或枚舉可以遵循&#xff08;adopt&#xff09;協議&#xff0c;從而提供所需的功能。協議定義了一組要求&#xff0c;遵循協議的類型需要提供對應的功能實現…

LED景觀照明燈驅動電路串聯、并聯和恒流3款方案

LED景觀照明燈是現代城市照明中常見的一種燈具。為了保證LED景觀照明燈的正常工作&#xff0c;需要設計合適的驅動電路。LED景觀照明燈的驅動電路可以采用串聯、并聯或恒流的方式來設計。 首先&#xff0c;串聯驅動電路是指將多個LED燈串聯在一起&#xff0c;然后接入電源進行…

【Spring】常見問題總結

目錄 1. 什么是 Spring 框架? 2. 列舉一些重要的Spring模塊&#xff1f; 3. RestController vs Controller 4. Spring IOC & AOP 4.1 談談自己對于 Spring IoC 和 AOP 的理解 IoC AOP 4.2 Spring AOP 和 AspectJ AOP 有什么區別&#xff1f; 5. Spring bean 5.1…

C語言第二十九彈---浮點數在內存中的存儲

?個人主頁&#xff1a; 熬夜學編程的小林 &#x1f497;系列專欄&#xff1a; 【C語言詳解】 【數據結構詳解】 目錄 1、浮點數在內存中的存儲 1.1、練習 1.2、浮點數怎么轉化為二進制 1.3、浮點數的存儲 1.3.1、浮點數存的過程 1.3.2、浮點數取的過程 1.3、題目解析…

FPGA領域頂級學術會議

FPGA領域頂級學術會議主要有FPGA,FCCM,FPL和FPT。 1 FPGA 會議全名是: ACM/SIGDA International Symposium on Field-Programmable Gate Arrays 網站是:https://dl.acm.org/conference/fpga FPGA常年在美國舉辦,每年2月,偏FPGA基礎研究; 該會議的論文免費下載。這個比…

【MATLAB源碼-第144期】基于matlab的蝴蝶優化算法(BOA)無人機三維路徑規劃,輸出做短路徑圖和適應度曲線。

操作環境&#xff1a; MATLAB 2022a 1、算法描述 ?蝴蝶優化算法&#xff08;Butterfly Optimization Algorithm, BOA&#xff09;是基于蝴蝶覓食行為的一種新穎的群體智能算法。它通過模擬蝴蝶個體在尋找食物過程中的嗅覺導向行為以及隨機飛行行為&#xff0c;來探索解空間…