【算法--鏈表】86.分割鏈表--通俗講解

一、題目是啥?一句話說清

給你一個鏈表和一個值 x,把鏈表分成兩部分:所有小于 x 的節點都放在大于或等于 x 的節點之前,并且保持節點原來的相對順序。

示例:

  • 輸入:head = [1,4,3,2,5,2], x = 3
  • 輸出:[1,2,2,4,3,5](所有小于3的節點1、2、2都在大于等于3的節點4、3、5之前,且相對順序不變)

二、解題核心

使用兩個臨時鏈表:一個收集所有小于 x 的節點,另一個收集所有大于或等于 x 的節點。遍歷原鏈表,將每個節點分配到對應的臨時鏈表中,最后將兩個臨時鏈表連接起來。 這就像把一堆水果分成兩筐:一筐放所有蘋果,另一筐放所有橙子,然后把蘋果筐放在橙子筐前面。

三、關鍵在哪里?(3個核心點)

想理解并解決這道題,必須抓住以下三個關鍵點:

1. 兩個臨時鏈表的使用

  • 是什么:創建兩個臨時鏈表,分別存儲小于 x 的節點和大于等于 x 的節點。
  • 為什么重要:這樣可以保持節點的相對順序,因為節點被按順序添加到對應的鏈表中。

2. 啞節點(Dummy Node)的運用

  • 是什么:為每個臨時鏈表創建一個啞節點作為頭節點,簡化鏈表操作。
  • 為什么重要:啞節點可以避免處理空鏈表的邊界情況,讓代碼更簡潔。

3. 正確連接鏈表

  • 是什么:遍歷完成后,將小于 x 的鏈表的末尾指向大于等于 x 的鏈表的頭節點,并將大于等于 x 的鏈表的末尾指向 null。
  • 為什么重要:如果連接不正確,可能會導致鏈表斷開或形成環。

四、看圖理解流程(通俗理解版本)

讓我們用鏈表 1 → 4 → 3 → 2 → 5 → 2 和 x=3 的例子來可視化過程:

  1. 初始化

    • 創建兩個啞節點:leftDummy 和 rightDummy。
    • 初始化兩個指針 left 和 right,分別指向 leftDummy 和 rightDummy。
    • 初始狀態:leftDummy → null, rightDummy → null
  2. 遍歷原鏈表

    • 節點1:值1 < 3,添加到 left 鏈表:leftDummy → 1
    • 節點4:值4 ≥ 3,添加到 right 鏈表:rightDummy → 4
    • 節點3:值3 ≥ 3,添加到 right 鏈表:rightDummy → 4 → 3
    • 節點2:值2 < 3,添加到 left 鏈表:leftDummy → 1 → 2
    • 節點5:值5 ≥ 3,添加到 right 鏈表:rightDummy → 4 → 3 → 5
    • 節點2:值2 < 3,添加到 left 鏈表:leftDummy → 1 → 2 → 2
  3. 連接鏈表

    • 將 left 鏈表的末尾(最后一個2)指向 right 鏈表的頭節點(4)。
    • 將 right 鏈表的末尾(5)指向 null。
    • 最終鏈表:leftDummy → 1 → 2 → 2 → 4 → 3 → 5
  4. 返回結果:返回 leftDummy.next,即節點1。

五、C++ 代碼實現(附詳細注釋)

#include <iostream>
using namespace std;// 鏈表節點定義
struct ListNode {int val

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

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

相關文章

707, 設計鏈表, LinkedList, 單鏈表, Dummy Head, C++

目錄 題意速覽解題思路與設計要點C 代碼實現&#xff08;單鏈表 虛擬頭結點&#xff09;時間復雜度與空間復雜度常見坑位與邊界用例對比&#xff1a;雙鏈表如何優化單元測試樣例&#xff08;可直接粘貼運行&#xff09;總結 題意速覽 設計一個支持如下操作的鏈表&#xff1a…

NAS自建筆記服務leanote2

leanote2(GitHub - wiselike/leanote2: leanote2, 適用于NAS自建的筆記服務) 是一個開源的在線筆記應用程序&#xff0c;繼承自原 leanote 項目。向原 leanote 的開發者表示深深的感謝與尊重&#xff0c;正是他們的辛勤付出奠定了這個優秀的筆記平臺的基礎。 但由于 leanote 項…

模型剪枝----ResNet18剪枝實戰

剪枝 模型剪枝&#xff08;Model Pruning&#xff09; 是一種 模型壓縮&#xff08;Model Compression&#xff09; 技術&#xff0c;主要思想是&#xff1a; 深度神經網絡里有很多 冗余參數&#xff08;對預測結果貢獻很小&#xff09;。 通過去掉這些冗余連接/通道/卷積核&am…

K8S-Pod(上)

Pod概念 Pod 是可以在 Kubernetes 中創建和管理的、最小的可部署的計算單元。 Pod是一組&#xff08;一個或多個&#xff09;容器&#xff1b;這些容器共享存儲、網絡、以及怎樣運行這些容器的規約。Pod 中的內容總是并置&#xff08;colocated&#xff09;的并且一同調度&am…

Flink TaskManager日志時間與實際時間有偏差

Flink 啟動一個任務后&#xff0c;發現TaskManager上日志時間與實際時間相差約 15 小時。 核心原因可能是&#xff1a; 1、 服務器&#xff08;或容器&#xff09;的系統時間配置錯誤2、 Flink 日志組件&#xff08;如 Logback/Log4j&#xff09;的時間配置未使用系統默認時區…

Webug3.0通關筆記18 中級進階第06關 實戰練習:DisCuz論壇SQL注入漏洞

目錄 一、環境搭建 1、服務啟動 2、源碼解壓 3、構造訪問靶場URL 4、靶場安裝 5、訪問論壇首頁 二、代碼分析 1、源碼分析 2、SQL注入分析 三、滲透實戰 &#xff08;1&#xff09;判斷是否有SQL注入風險 &#xff08;2&#xff09;查詢賬號密碼 Discuz! 作為國內知…

SWEET:大語言模型的選擇性水印

摘要背景與問題大語言模型出色的生成能力引發了倫理與法律層面的擔憂&#xff0c;于是通過嵌入水印來檢測機器生成文本的方法逐漸發展起來。但現有工作在代碼生成任務中無法良好發揮作用&#xff0c;原因在于代碼生成任務本身的特性&#xff08;代碼有其特定的語法、邏輯結構&a…

FastDFS V6雙IP特性及配置

FastDFS V6.0開始支持雙IP&#xff0c;tracker server和storage server均支持雙IP。V6.0新增特性說明如下&#xff1a;支持雙IP&#xff0c;一個內網IP&#xff0c;一個外網IP&#xff0c;可以支持NAT方式的內網和外網兩個IP&#xff0c;解決跨機房或混合云部署問題。FastDFS雙…

筆記本、平板如何成為電腦拓展屏?向日葵16成為副屏功能一鍵實現

向日葵16重磅上線&#xff0c;本次更新新增了諸多實用功能&#xff0c;提升遠控效率&#xff0c;實現應用融合突破設備邊界&#xff0c;同時全面提升遠控性能&#xff0c;操作更順滑、畫質更清晰&#xff01;無論遠程辦公、設計、IT運維、開發還是游戲娛樂&#xff0c;向日葵16…

基于Spring Boot + MyBatis的用戶管理系統配置

我來為您詳細分析這兩個配置文件的功能和含義。 一、文件整體概述 這是一個基于Spring Boot MyBatis的用戶管理系統配置&#xff1a; UserMapper.xml&#xff1a;MyBatis的SQL映射文件&#xff0c;定義了用戶表的增刪改查操作application.yml&#xff1a;Spring Boot的核心配置…

80(HTTP默認端口)和8080端口(備用HTTP端口)區別

文章目錄**1. 用途**- **80端口**- **8080端口****2. 默認配置**- **80端口**- **8080端口****3. 聯系**- **邏輯端口**&#xff1a;兩者都是TCP/IP協議中的邏輯端口&#xff0c;用于標識不同的網絡服務。- **可配置性**&#xff1a;端口號可以根據需要修改&#xff08;例如將T…

【開題答辯全過程】以 汽車知名品牌信息管理系統為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

從全棧工程師視角解析Java與前端技術在電商場景中的應用

從全棧工程師視角解析Java與前端技術在電商場景中的應用 面試背景介紹 面試官&#xff1a;你好&#xff0c;很高興見到你。我叫李明&#xff0c;是這家電商平臺的資深架構師。今天我們會聊聊你的技術能力和項目經驗。你可以先簡單介紹一下自己嗎&#xff1f; 應聘者&#xff1a…

【python】python進階——多線程

引言在現代軟件開發中&#xff0c;程序的執行效率至關重要。無論是處理大量數據、響應用戶交互&#xff0c;還是與外部系統通信&#xff0c;常常需要讓程序同時執行多個任務。Python作為一門功能強大且易于學習的編程語言&#xff0c;提供了多種并發編程方式&#xff0c;其中多…

【JavaEE】(23) 綜合練習--博客系統

一、功能描述 用戶登錄后&#xff0c;可查看所有人的博客。點擊 “查看全文” 可查看該博客完整內容。如果該博客作者是登錄用戶&#xff0c;可以編輯或刪除博客。發表博客的頁面同編輯頁面。 本練習的博客網站&#xff0c;并沒有添加注冊功能&#xff0c;以及上傳作者頭像功能…

MySQL全庫檢索關鍵詞 - idea 工具 Full-Text Search分享

我們經常要在庫中查找一個數據&#xff0c;又不知道在哪個表、哪個字段&#xff1b;或者想找到哪里有在用這個數據。我們可以用&#xff1a;idea 的 Database工具 - Full-Text Search打開idea&#xff0c;在工具欄找到 Database 然后新建自己的連接&#xff0c;然后右鍵&#x…

銀行卡號識別案例

代碼實現&#xff1a;import cv2 import numpy as np import argparse import myutils-i moban.png -t card1.pngap argparse.ArgumentParser() ap.add_argument("-i","--image", requiredTrue,help"path to input image") ap.add_argument(&quo…

云管平臺上線只是開始:從“建好”到“用好”的運營、推廣與深化指南

項目上線的喜悅轉瞬即逝,隨之而來的是一個更為現實和復雜的階段:運營。云管平臺(CMP)的成功,不再僅僅取決于其技術架構的先進性,更在于它能否融入組織的肌理,為不同角色持續創造價值。本文將從管理者、平臺團隊、開發者、運維和財務五個核心角色的視角,深入探討平臺上線…

distributed.client.Client 用戶可調用函數分析

distributed.client.Client 用戶可調用函數分析 1. 核心計算函數 任務提交和執行submit(func, *args, keyNone, workersNone, resourcesNone, retriesNone, priority0, fifo_timeout60s, allow_other_workersFalse, actorFalse, actorsFalse, pureNone, **kwargs) 提交單個函數…

數字圖像處理——信用卡識別

在數字支付時代&#xff0c;信用卡處理自動化技術日益重要。本文介紹如何利用Python和OpenCV實現信用卡數字的自動識別&#xff0c;結合圖像處理與模式識別技術&#xff0c;具有顯著實用價值。系統概述與工作原理信用卡數字識別系統包含兩大核心模塊&#xff1a;模板數字預處理…