LeetCode---【鏈表的操作】

目錄

  • 206反轉鏈表【鏈表結構基礎】
  • 21合并兩個有序鏈表【遞歸】
    • 我的答案【錯誤】
    • 自己修改【超出時間限制】
    • 在官方那里學到的【然后自己復寫,錯誤】
    • 對照官方【自己修改】
  • 160相交鏈表【未理解題目目的】
    • 在b站up那里學到的【然后自己復寫,錯誤】
    • 【超出時間限制】
    • 對照官方【自己修改】
  • 19刪除鏈表的倒數第 N 個結點
    • 看完官方解題思路【自己復寫,錯誤】
    • 報錯信息
    • 第一遍修改
    • 第二遍修改
  • 148排序鏈表
  • 我的答案【冒泡排序:最小的負數輸出時變為0】
    • 官方答案【歸并排序】

206反轉鏈表【鏈表結構基礎】

  • 設定一個前結點和后結點。
class Solution(object):def reverseList(self, head):""":type head: ListNode:rtype: ListNode"""pre=Nonecur=headwhile cur!=None:temp=cur.nextcur.next=prepre=curcur=tempreturn pre

21合并兩個有序鏈表【遞歸】

我的答案【錯誤】

class Solution(object):def mergeTwoLists(self, list1, list2):""":type list1: Optional[ListNode]:type list2: Optional[ListNode]:rtype: Optional[ListNode]"""resol=ListNode()while list1!=None and list2!=None:if list1.val<=list2.val:resol.next=ListNode(list1.val)else:resol.next=ListNode(list2.val)list1=list1.nextlist2=list2.nextwhile list1!=None:resol.next=ListNode(list1.val)while list2!=None:resol.next=ListNode(list2.val)return resol.next

自己修改【超出時間限制】

class Solution(object):def mergeTwoLists(self, list1, list2):""":type list1: Optional[ListNode]:type list2: Optional[ListNode]:rtype: Optional[ListNode]"""resol=ListNode(0)temp=resolwhile list1 and list2:if list1.val<=list2.val:resol.next=list1list1=list1.next################else:resol.next=list2list2=list2.next################resol=resol.next######################其實是不斷增加結點的過程,所以記得更新while list1:resol.next=list1while list2:resol.next=list2return temp.next

在官方那里學到的【然后自己復寫,錯誤】

class Solution(object):def mergeTwoLists(self, list1, list2):""":type list1: Optional[ListNode]:type list2: Optional[ListNode]:rtype: Optional[ListNode]"""if list1 is None:return list2elif list2 is None:return list1else:if list1.val<list2.val:list1.next=mergeTwoLists(self,list1.next,list2)###如果只改mergeTwoLists(self,list1.next,list2)也是可以編譯通過的,運行成功,else這里的邏輯也可以修正一下return list1else:list2.next=mergeTwoLists(self,list2.next,list1)return list2

對照官方【自己修改】

class Solution(object):def mergeTwoLists(self, list1, list2):""":type list1: Optional[ListNode]:type list2: Optional[ListNode]:rtype: Optional[ListNode]"""if list1 is None:return list2elif list2 is None:return list1elif list1.val<list2.val:list1.next=self.mergeTwoLists(list1.next,list2)########函數的調用return list1else:list2.next=self.mergeTwoLists(list2.next,list1)########函數的調用return list2

160相交鏈表【未理解題目目的】

  • 我看輸入部分都已經給了要輸出的結果了,就不明白這題目的是要做什么。

在b站up那里學到的【然后自己復寫,錯誤】

class Solution(object):def getIntersectionNode(self, headA, headB):""":type head1, head1: ListNode:rtype: ListNode"""p=headA,q=headBwhile(p!=q):p ? p.next : headBq ? q.next : headAprint("p.val")

【超出時間限制】

class Solution(object):def getIntersectionNode(self, headA, headB):""":type head1, head1: ListNode:rtype: ListNode"""p=headAq=headBwhile(p!=q):if p.next !=None:p=p.nextelse:p=headBif q.next!=None:q=q.nextelse:q=headAreturn p

對照官方【自己修改】

class Solution(object):def getIntersectionNode(self, headA, headB):""":type head1, head1: ListNode:rtype: ListNode"""p=headA ####p,q=headA,headB這樣可以q=headB ####p=headA,q=headB會報錯while(p!=q):p = p.next if p else headBq = q.next if q else headAreturn p

19刪除鏈表的倒數第 N 個結點

看完官方解題思路【自己復寫,錯誤】

class Solution(object):def removeNthFromEnd(self, head, n):""":type head: ListNode:type n: int:rtype: ListNode"""p=headfor i in range(n+1):p=p.nextq=headwhile p!=None:q=q.nextp=p.next###########【這里不能少啊!】q.next=q.next.nextreturn head

報錯信息

在這里插入圖片描述

  • 查閱資料后發現:【self.head是指向第一個元素的,此時為None,所以沒有next屬性,自然就會報錯。因此第一個結點需要特殊處理,我們一般通過增加頭結點的方式來避免這種特殊處理。

第一遍修改

  • 發現當鏈表有n個元素時,無法刪除倒數第n個元素。
  • 【沒有考慮到第一個結點的特殊性。】
class Solution(object):def removeNthFromEnd(self, head, n):""":type head: ListNode:type n: int:rtype: ListNode"""p=ListNode(0, head)#################for i in range(n+1):p=p.nextq=ListNode(0, head)#################while p!=None:q=q.nextp=p.nextq.next=q.next.next#########無法刪除倒數第n個元素return head

第二遍修改

class Solution(object):def removeNthFromEnd(self, head, n):""":type head: ListNode:type n: int:rtype: ListNode"""dummy=ListNode(0, head)p=dummyfor i in range(n+1):p=p.nextq=dummywhile p!=None:q=q.nextp=p.nextq.next=q.next.nextreturn dummy.next 

148排序鏈表

我的答案【冒泡排序:最小的負數輸出時變為0】

class Solution(object):def sortList(self, head):""":type head: ListNode:rtype: ListNode"""dummy=ListNode(0,head)q=dummywhile q.next!=None:p=dummywhile p.next!=None:if p.val>p.next.val:temp=p.valp.val=p.next.valp.next.val=tempp=p.nextq=q.nextreturn dummy.next

在這里插入圖片描述

官方答案【歸并排序】

class Solution(object):def sortList(self, head):def sortFunc(head, tail):if not head:return headif head.next == tail:head.next = Nonereturn headslow = fast = headwhile fast != tail:slow = slow.nextfast = fast.nextif fast != tail:fast = fast.nextmid = slowreturn merge(sortFunc(head, mid), sortFunc(mid, tail))######合并兩個升序鏈表,但是長度差最多為1    def merge(head1, head2):dummyHead = ListNode(0)temp, temp1, temp2 = dummyHead, head1, head2while temp1 and temp2:if temp1.val <= temp2.val:temp.next = temp1temp1 = temp1.nextelse:temp.next = temp2temp2 = temp2.nexttemp = temp.nextif temp1:temp.next = temp1elif temp2:temp.next = temp2return dummyHead.nextreturn sortFunc(head, None)

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

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

相關文章

(C語言)qsort函數模擬實現

前言 我們需先了解qsort函數 qsort函數詳解&#xff1a;http://t.csdnimg.cn/rTNv9 qsort函數可以排序多種數據類型&#xff0c;很是神奇&#xff0c;這是為什么&#xff0c;我們在里模擬實現這樣的功能 目錄 1. qsort函數模擬實現 2. 我們使用bubble_sort函數排序整形數…

探究前端的.less樣式文件 css的增強版

前言 .less 文件是一種層疊樣式表&#xff08;CSS&#xff09;預處理器語言的文件格式&#xff0c;簡稱 LESS&#xff08;Leaner Style Sheets&#xff09;。它擴展了 CSS 語言&#xff0c;增加了變量、混合、函數和許多其他技術&#xff0c;使得 CSS 更加易于維護和擴展。 與…

AntDesignVue之a-table中key不唯一問題處理的多種方式

AntDesignVue2之a-table中key不唯一問題處理的多種方式 文章目錄 AntDesignVue2之a-table中key不唯一問題處理的多種方式1. key不唯一問題1. 問題描述2. 解決方法1. 帶冒號的rowKey2 . 帶冒號的rowKey綁定表達式3. 不帶冒號的rowKey屬性 1. key不唯一問題 1. 問題描述 antdv: …

Sunshine v0.21.0 安裝卡住,閃退的問題解決

上期博客講了如何利用 Sunshine 和 Moonlight 實現 iPad 當作 Windows 副屏&#xff0c;用官方 Windows installer 安裝 Sunshine 過程中&#xff0c;遇到了安裝卡住&#xff08;這個是因為需要國外網絡環境&#xff09;&#xff0c;安裝后運行閃退的問題。 Sunshine 下載地址…

OpenCV 4基礎篇| OpenCV圖像的裁切

目錄 1. Numpy切片1.1 注意事項1.2 代碼示例 2. cv2.selectROI()2.1 語法結構2.2 注意事項2.3 代碼示例 3. Pillow.crop3.1 語法結構3.2 注意事項3.3 代碼示例 4. 擴展示例&#xff1a;單張大圖裁切成多張小圖5. 總結 1. Numpy切片 語法結構&#xff1a; retval img[y:yh, x…

以目標檢測和分類任務為例理解One-Hot Code

在目標檢測和分類任務中&#xff0c;每一個類別都需要一個編碼來表示&#xff0c;同時&#xff0c;這個編碼會用來計算網絡的loss。比如有貓&#xff0c;狗&#xff0c;豬三種動物&#xff0c;這三種動物相互獨立&#xff0c;在分類中&#xff0c;將其中任意一種分類為其他都同…

YOLOv9獨家原創改進|使用可改變核卷積AKConv改進RepNCSPELAN4

專欄介紹&#xff1a;YOLOv9改進系列 | 包含深度學習最新創新&#xff0c;主力高效漲點&#xff01;&#xff01;&#xff01; 一、改進點介紹 AKConv是一種具有任意數量的參數和任意采樣形狀的可變卷積核&#xff0c;對不規則特征有更好的提取效果。 RepNCSPELAN4是YOLOv9中的…

前端架構: 腳手架通用框架封裝之啟動檢查功能開發(教程四)

腳手架啟動前的檢查功能開發 接上文&#xff0c;仍舊在 abc-cli 項目中參考&#xff1a;https://blog.csdn.net/Tyro_java/article/details/136431320現在要在腳手架啟動前要做一些邏輯&#xff0c;可以在 hook 鉤子函數中去書寫比如&#xff0c;進行node版本的對比&#xff0…

2023年12月CCF-GESP編程能力等級認證Scratch圖形化編程四級真題解析

一、單選題(共15題,共30分) 第1題 現代計算機是指電子計算機,它所基于的是( )體系結構。 A:艾倫圖靈 B:馮諾依曼 C:阿塔納索夫 D:埃克特-莫克利 答案:B 第2題 默認小貓角色,執行下列程序,以下說法正確的是? ( ) A:舞臺上會出現無數個小貓 B:舞臺只會出現…

java spring 02. AbstractApplicationContext

spring創建對象的順序&#xff0c;先創建beanfactory&#xff0c;再會把xml文件讀取到spring。 public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, Nullable ApplicationContext parent)throws BeansException {//調用父類的構造方法super(p…

Redis常用指令,jedis與持久化

1.redis常用指令 第一個是key的常用指令&#xff0c;第二個是數據庫的常用指令 前面的那些指令都是針對某一個數據類型操作的&#xff0c;現在的都是對所有的操作的 1.key常用指令 key應該設計哪些操作 key是一個字符串&#xff0c;通過key獲取redis中保存的數據 對于key…

flink重溫筆記(九):Flink 高級 API 開發——flink 四大基石之WaterMark(Time為核心)

Flink學習筆記 前言&#xff1a;今天是學習 flink 的第 9 天啦&#xff01;學習了 flink 四大基石之 Time的應用—> Watermark&#xff08;水印&#xff0c;也稱水位線&#xff09;&#xff0c;主要是解決數據由于網絡延遲問題&#xff0c;出現數據亂序或者遲到數據現象&…

通過大語言模型理解運維故障:評估和總結

張圣林 南開大學軟件學院副教授、博士生導師 第六屆CCF國際AIOps挑戰賽程序委員會主席 在ATC、WWW、VLDB、KDD、SIGMETRICS等國際會議和JSAC、TC、TSC等國際期刊發表高水平論文50余篇。主持國家自然科學基金項目2項&#xff0c;橫向項目13項&#xff08;與華為、字節跳動、騰訊…

Sqli-labs靶場第20關詳解[Sqli-labs-less-20]自動化注入-SQLmap工具注入

Sqli-labs-Less-20 通過測試發現&#xff0c;在登錄界面沒有注入點&#xff0c;通過已知賬號密碼admin&#xff0c;admin進行登錄發現&#xff1a; 登錄后會有記錄 Cookie 值 設想如果在Cookie嘗試加上注入語句&#xff08;報錯注入&#xff09;&#xff0c;測試是否會執行…

C++STL之vector

vector 1. vector介紹 vector文檔vector其實就是一個順序表&#xff0c;它表示可變大小數組的序列容器。像數組一樣&#xff0c;可以使用下標[] 來訪問vector的元素&#xff0c;和數組一樣高效&#xff1b;甚至&#xff0c;它的大小是可以動態改變的&#xff0c;其大小由容器自…

printf() 函數支持變長參數列表

printf() 函數也支持變長參數列表&#xff0c;可以使用省略號 … 來表示&#xff0c;用于指定要輸出的多個值。在函數內部&#xff0c;可以使用 va_start() 和 va_end() 宏來訪問變長參數列表中的值。例如&#xff1a; #include <stdio.h> #include <stdarg.h>voi…

軟考55-上午題-【數據庫】-數據庫設計步驟1

一、數據庫設計的步驟 新奧爾良法&#xff0c;四個主要階段&#xff1a; 1、用戶需求分析&#xff1a;手機用戶需求&#xff0c;確定系統邊界&#xff1b; 2、概念設計&#xff08;概念結構設計&#xff09;&#xff1a;是抽象概念模型&#xff0c;較理想的是采用E-R方法。 …

深度學習:開啟你的AI探索之旅

在這個信息爆炸的時代,人工智能(AI)已經滲透到我們生活的方方面面,從智能語音助手到自動駕駛汽車,從智能推薦系統到醫療影像診斷,AI的身影無處不在。而深度學習,作為AI領域的一大核心技術,更是引領著這場科技革命的浪潮。那么,如何入門深度學習,踏上這趟充滿挑戰與機…

深入Gradle:初識構建自動化的魅力

在軟件開發的世界中&#xff0c;構建工具是不可或缺的一部分。它們幫助我們自動化編譯、測試和打包應用程序的過程&#xff0c;從而節省時間并減少錯誤。在眾多構建工具中&#xff0c;Gradle以其靈活性、可擴展性和卓越的性能而脫穎而出。本篇文章將帶你走進Gradle的世界&#…

代碼隨想錄算法訓練營第七天

● 自己看到題目的第一想法 第454題.四數相加II 方法&#xff1a; 方法一&#xff1a; 暴力法 思路&#xff1a; 注意&#xff1a; 代碼&#xff1a; class Solution { public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<i…