203.移除鏈表元素 707.設計鏈表 206.反轉鏈表

?203.移除鏈表元素

Python鏈表節點定義:
class ListNode:def __init__(self, val, next=None):self.val = valself.next = next
性能分析

鏈表的特性和數組的特性進行一個對比,如圖所示:

203. 移除鏈表元素

這道題就是給大家一個鏈表,移除鏈表中等于某個target的所有節點。然后返回這個鏈表的頭節點。

如果我們刪除這個節點的話,讓這個節點的前一個節點,指向這個節點的下一個節點。這樣我們就把這個元素從列表中移除了。

移除節點時有一個問題。如果移除的節點是頭節點,頭節點沒有前一個節點,我們要把Head向下移1位 ?head=head.next。這樣我們就把頭結點,從鏈表中刪除了。他的新的頭結點是原來的第二個節點。

從列表中移除元素針對頭節點和非頭節點的移除元素的方式是不一樣的。
那么我們在實現這段代碼邏輯的時候就要做一個判斷,我們刪除的這個節點是不是頭節點?這樣的話我們刪除節點的方式就沒有統一,能不能有一種方式能統一的方式刪除所有節點?
還有一種方法叫做虛擬頭結點的方法:就是在這個列表中再加入一個頭節點。這個頭節點叫做dummy head。是虛擬的。這樣的話我們再去刪除列表中的元素時,所有的元素都可以按照一個規則進行刪除。

不用虛擬頭節點來刪除代碼中元素的方法:

首先我們要判斷我們刪除的元素是不是頭節點。
這個頭節點一定要不為空,因為我們接下來要取這個頭節點的值。如果這個頭節點為空的話,我們相當于取了一個空指針,編譯的時候會報錯。同時這個頭節點的數值等于我們要刪除的值。滿足這樣的情況時,我們要把這個頭節點刪掉。
if (head != null and head->val == target)
我們進行移除頭節點的操作后,移動到下一個節點時發現還是一樣。所以我們移除頭節點其實是一個持續移除的過程。所以這里應該是while。
while (head != null and head->val == target)head = head->nextcur  = head
這里的臨時指針為什么是從head開始而不是從它的下一個節點開始?例如說我現在要刪除第二個元素。刪除第二個元素要找他的上一個節點指向他的下一個節點。所以這里要記錄該節點的上一個節點。所以我們要刪除head.next要從head開始。
whlie(cur != null && cur.next != null){
這兩個值不能為空,否則在取值時會出現空指針錯誤。if (cur->next->val == target){cur->next = cur->next->next}else {cur = cur->next}return head

用虛擬頭節點的方法:

首先將dummyhead的實例化,new出來一個節點
dummyhead = new ListNode()
dummyhead->next = head
定義一個臨時指針來遍歷鏈表,頭節點的指針是不能改的。否則最后返回的頭節點一直在變化。
cur = dummyhead 
這里為什么不定義cur = dummyhead.next?我們如果要刪掉一個元素,必須要知道這個元素的上一個元素是什么。
while(cur->next != null){if (cur->next->val == target){cur->next = cur->next->next;else{cur = cur->next}
return dummyhead->next
為什么不返回head?因為head有可能已經被我們刪掉了。

Python代碼:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:dummyhead = ListNode()dummyhead.next = headcur = dummyheadwhile cur.next != None:if cur.next.val == val:cur.next = cur.next.nextelse:cur = cur.nextreturn dummyhead.next

707. 設計鏈表

?

Python代碼:

class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextclass MyLinkedList:def __init__(self):self.dummy_head = ListNode()self.size = 0def get(self, index: int) -> int:if index < 0 or index >= self.size:return -1current = self.dummy_head.nextfor i in range(index):current = current.nextreturn current.valdef addAtHead(self, val: int) -> None:self.dummy_head.next = ListNode(val, self.dummy_head.next)self.size += 1def addAtTail(self, val: int) -> None:current = self.dummy_headwhile current.next:current = current.nextcurrent.next = ListNode(val)self.size += 1def addAtIndex(self, index: int, val: int) -> None:if index < 0 or index > self.size:returncurrent = self.dummy_headfor i in range(index):current = current.nextcurrent.next = ListNode(val, current.next)self.size += 1def deleteAtIndex(self, index: int) -> None:if index < 0 or index >= self.size:returncurrent = self.dummy_headfor i in range(index):current = current.nextcurrent.next = current.next.nextself.size -= 1# Your MyLinkedList object will be instantiated and called as such:
# obj = MyLinkedList()
# param_1 = obj.get(index)
# obj.addAtHead(val)
# obj.addAtTail(val)
# obj.addAtIndex(index,val)
# obj.deleteAtIndex(index)

206. 反轉鏈表

Python代碼:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:pre =Nonecur = headwhile cur:temp = cur.nextcur.next = prepre = curcur = tempreturn pre方法二:
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def reverse(self, cur: Optional[ListNode], pre: Optional[ListNode]) ->Optional[ListNode]:if cur == None:return pretemp = cur.nextcur.next = prereturn self.reverse(temp, cur)def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:return self.reverse(head, None)

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

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

相關文章

人工智能之數學基礎:利用全概率公式如何將復雜事件轉為簡單事件

本文重點 全概率公式是概率論中的核心工具,用于計算復雜事件的概率。其核心思想是將復雜事件分解為若干互斥且窮盡的簡單事件,通過計算各簡單事件的概率及其條件概率,最終求得目標事件的概率。 全概率公式 全概率公式就是將復雜事件簡單化,定義如下: 如果隨機事件A1,…

飛算JavaAI深度解析:從入門到對比

目錄 一、飛算JavaAI是什么 二、如何注冊和開始使用 三、使用體驗&#xff1a;它能帶來什么 四、與其他大模型的對比分析 五、總結與展望 隨著人工智能技術的飛速發展&#xff0c;大模型在軟件開發領域的應用越來越廣泛。其中&#xff0c;代碼生成工具作為提升開發效率的利…

Flutter各大主流狀態管理框架技術選型分析及具體使用步驟

技術選型決策樹 #mermaid-svg-m5gUL7Cpx4rYV2BQ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-m5gUL7Cpx4rYV2BQ .error-icon{fill:#552222;}#mermaid-svg-m5gUL7Cpx4rYV2BQ .error-text{fill:#552222;stroke:#552…

Redis類型之String

1.Redis中的string注意本文以及之后講的redis的類型但是指的value的類型&#xff0c;所有的key都是stringRedis中的字符串&#xff0c;直接就是按照二進制數據的方式存儲的&#xff0c;不會做任何的編碼轉換&#xff0c;這里相對于mysql就比較好&#xff08;個人感覺&#xff0…

[激光原理與應用-156]:光學器件 - 激光器為什么會出現多余的能量,哪些地方會出現多余能量?

在激光器運行過程中&#xff0c;多余能量的出現是不可避免的物理現象&#xff0c;其根源在于能量轉換與傳輸過程中的非理想特性。以下從能量來源、產生位置及具體機制三方面進行詳細說明&#xff1a;一、多余能量的主要來源泵浦源效率限制泵浦源&#xff08;如激光二極管、閃光…

Arxiv-Daily

Daily Paper Report - 2025-07-24 12:53 Today’s Recommended Papers 1. Multi-modal Multi-task Pre-training for Improved Point Cloud Understanding Authors: Liwen Liu, Weidong Yang, Lipeng Ma, Ben Fei Deep-Dive Summary: 多模態多任務預訓練以改善點云理解 預…

如何對云環境或者超融合系統進行性能測試?

最近幾個月&#xff0c;公司開啟了新的產品計劃&#xff0c;準備來做一個國產超融合一體機&#xff08;其實個人覺得現在入行已經晚了太多了&#xff0c;市場基本沒有多少了&#xff09; POC功能測試過完&#xff0c;但是感覺不到什么優勢&#xff0c;由于芯片架構采用的是arm架…

【web自動化測試】實戰

web自動化測試就是對界面的測試1、編寫測試用例2、參考測試用例&#xff0c;創建自動化測試項目&#xff0c;編寫自動化測試腳本論壇登錄頁&#xff1a;ForumLoginTest.py論壇首頁&#xff1a;ForumListTest.py論壇詳情頁&#xff1a;ForumDetailTest.py論壇編輯頁&#xff1a;…

在Maxscript中隨機化對象變換、顏色和材質

只需幾行Maxscript,即可為3ds Max場景帶來更多活力和變化! 在本文中,您將學習如何快速隨機化選定對象的位置、旋轉、線顏色和材質。 非常適合在ArchViz、動態圖形和產品可視化項目中創建更自然、更少機械的布局。 為什么要使用隨機化腳本? 1.快速為場景添加自然隨機性 2.…

分類數據集 - 交通事故場景分類數據集下載

數據集介紹&#xff1a;交通事故場景分類數據集&#xff0c;真實交通場景高質量圖片數據&#xff1b;適用實際項目應用&#xff1a;公共場所監控場景下是否發生交通事故檢測項目&#xff0c;以及作為監控場景通用交通檢測數據集場景數據的補充&#xff1b;數據集類別&#xff1…

內網公網詳解,及無公網IP內網穿透給外網直接遠程連接訪問的具體實現方法步驟

一、什么是內網、外網1、內網IP&#xff08;局域網IP&#xff09;是指在私有網絡或局域網內部使用的IP地址&#xff0c;無法直接從互聯網訪問&#xff0c;需通過NAT&#xff08;網絡地址轉換&#xff09;技術實現對外通信。內網IP&#xff08;Intranet IP&#xff09;是專為局域…

Redis協議數據遷移方式

主從復制&#xff08;REPLICAOF/SLAVEOF&#xff09;&#xff1a;目標實例掛為從節點&#xff0c;通過復制協議全量增量同步后切換為主。模擬從節點工具&#xff1a;模擬復制協議同步數據&#xff0c;常見兩種實現&#xff1a;(1) 拉取全量和增量命令流&#xff0c;在本地生成 …

英語中日期與時間縮寫

日常使用中&#xff0c;時間縮寫無處不在。掌握這些縮寫不僅能提高溝通效率&#xff0c;還能讓您的英語表達更加地道和專業。本文將系統性地介紹英語中各類時間相關縮寫&#xff0c;包括月份、星期、時刻表達等&#xff0c;并提供實用記憶技巧和應用場景。 一、時間縮寫基礎概…

【Spring Cloud】-- RestTeplate實現遠程調用

實現遠程調用有很多種方式&#xff0c;這里我們使用RestTemplate來進行實現。 REST &#xff1a;表現層資源狀態轉移&#xff08;資源在網絡中以某種表現形式進行狀態轉移&#xff09;&#xff0c;是一種軟件架構風格&#xff0c;狀態轉移&#xff1a;數據狀態的變化。 表現層&…

2025年信創政策解讀:如何應對國產化替代挑戰?(附禪道/飛書多維表格/華為云DevCloud實戰指南)

本文核心產品&#xff1a;??禪道&#xff08;國產項目管理工具&#xff09;、飛書多維表格&#xff08;協同辦公工具&#xff09;、華為云DevCloud&#xff08;云端研發平臺&#xff09;?? ——在“自主可控”成為國家戰略關鍵詞的2025年&#xff0c;國產化替代已從“可選動…

如何讓 RAG 檢索更高效?——大模型召回策略全解

如何讓 RAG 檢索更高效&#xff1f;——大模型召回策略全解 一、引子&#xff1a;RAG 的“強”靠得住嗎&#xff1f; RAG&#xff08;Retrieval-Augmented Generation&#xff09;作為一種將文檔檢索與大語言模型結合的框架&#xff0c;已成為企業落地知識問答、搜索增強、智能…

Bilateral Reference for High-Resolution Dichotomous Image Segmentation

代碼來源 https://github.com/ZhengPeng7/BiRefNet 模塊作用 DIS 是一種旨在對高分辨率圖像中的目標物體進行精確分割的技術&#xff0c;尤其適用于具有復雜細微結構的物體&#xff0c;例如細長的邊緣或微小細節。傳統方法在處理這類任務時往往難以捕捉細微特征或恢復高分辨…

RAGFlow 0.20.0 : Multi-Agent Deep Research

Deep Research&#xff1a;Agent 時代的核心能力2025 年被稱為 Agent 落地元年&#xff0c;在解鎖的各類場景中&#xff0c;最有代表性之一&#xff0c;就是 Deep Research 或者以它為基座的各類應用。為什么這么講&#xff1f; 因為通過 Agentic RAG 及其配套的反思機制&#…

CMakeLists.txt學習

一&#xff1a;#是行注釋 &#xff0c;[[ 塊注釋 ]]0.cmake_minimum_required: 指定使用的cmake的最低版本1.project() 定義工程名稱并可以指定工程的版本&#xff0c;工程描述&#xff0c;web主頁地址&#xff0c;支持的語言&#xff08;默認情況支持所有語言&#xff09;2.…

Pytorch-04 搭建神經網絡架構工作流

搭建神經網絡架構 在pytorch中&#xff0c;神經網絡被抽象成由一系列對數據執行特定操作的層或者模塊組成&#xff0c;比如下面的Attention實現&#xff0c;每個塊都是一個模塊或者層。 如果你想快速搭建網絡架構&#xff0c;torch.nn這個命名空間提供了所有很多開箱即用的層…