【C++算法】53.鏈表_重排鏈表

文章目錄

    • 題目鏈接:
    • 題目描述:
    • 解法
    • C++ 算法代碼:


題目鏈接:

143. 重排鏈表


題目描述:

92a1340d26e9ad70d5f6859b69337486


解法

模擬

  1. 找到鏈表的中間節點
    1. 快慢雙指針
  2. 把后面的部分逆序
    1. 雙指針,三指針,頭插法
  3. 合并兩個鏈表
    1. 合并兩個有序鏈表(雙指針)

34386a568e5943034b04475d6ca104f8


C++ 算法代碼:

/*** 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:void reorderList(ListNode* head) {// 處理邊界情況// 如果鏈表為空、只有一個節點或只有兩個節點,無需重排if(head == nullptr || head->next == nullptr || head->next->next == nullptr) return;// 1. 找到鏈表的中間節點 - 使用快慢雙指針法// slow最終會指向中間節點,對于奇數長度鏈表指向正中間,對于偶數長度鏈表指向中間靠左的節點ListNode* slow = head, *fast = head;while(fast && fast->next){slow = slow->next;fast = fast->next->next;}// 2. 將鏈表的后半部分逆序 - 使用頭插法ListNode* head2 = new ListNode(0); // 創建虛擬頭節點用于后半部分逆序ListNode* cur = slow->next;slow->next = nullptr; // 斷開鏈表,前半部分以slow為尾節點// 遍歷后半部分并進行逆序while(cur){ListNode* next = cur->next; // 保存下一個節點cur->next = head2->next;    // 當前節點指向頭節點的下一個head2->next = cur;          // 頭節點指向當前節點,實現頭插cur = next;                 // 移動到下一個節點}// 3. 合并兩個鏈表 - 一個節點來自第一個鏈表,一個節點來自第二個鏈表ListNode* ret = new ListNode(0); // 創建虛擬頭節點用于合并結果ListNode* prev = ret;ListNode* cur1 = head;           // 前半部分鏈表的頭節點ListNode* cur2 = head2->next;    // 后半部分逆序后的頭節點// 交替合并兩個鏈表while(cur1){// 先放入前半部分的節點prev->next = cur1;cur1 = cur1->next;prev = prev->next;// 再放入后半部分的節點(如果有)if(cur2){prev->next = cur2;prev = prev->next;cur2 = cur2->next;}}// 釋放臨時創建的虛擬頭節點delete head2;delete ret;}
};

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

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

相關文章

【Java設計模式】第7章 建造者模式講解

7-1 建造者模式講解 1. 定義與類型 定義: 將復雜對象的構建與表示分離,使相同構建過程可創建不同表示。類型: 創建型模式。通俗解釋: 分步構建含多組件的對象,流程固定但順序靈活(如做菜時放鹽順序可變)。2. 適用場景 對象內部結構復雜(多屬性或多步驟)。需將對象創建與…

本地laravel項目【dcat-admin】部署到liunx服務器

文章目錄 前言一、部署流程1、數據庫搬遷2、寶塔創建網站,配置php3、修改nginx配置4、在public目錄設置軟連接5、修改env配置、刷新緩存 二、其他問題1.后臺登陸失敗問題2.完美解決接口跨域問題 總結 前言 laravel新手記錄 差不多一個月,總算用laravel…

醫院導航系統方案:多模態三維導航引擎賦能醫院智慧升級(二)

本文面向智慧醫院建設方與算法研發工程師,聚焦解決多樓層復雜場景下的精準導航難題,提供從數學建模到工程落地的技術實戰方案。 如需獲取智慧醫院導航導診系統解決方案請前往文章最下方獲取,如有項目合作及技術交流歡迎私信作者。 一、技術聚…

NO.84十六屆藍橋杯備戰|動態規劃-路徑類DP|矩陣的最小路徑和|迷霧森林|過河卒|方格取數(C++)

路徑類dp是線性dp的?種,它是在?個nm的矩陣中設置?個??規則,研究從起點?到終點的?案數、最?路徑和或者最?路徑和等等的問題 矩陣的最小路徑和_牛客題霸_牛客網 狀態表?: dp[i][j]表?:到達[i, j]位置處,最?…

openlayers入門01 -- 環境配置和初始化地圖

openlayers入門 openlayers開發環境配置 1.下載VSCode 官網地址:https://code.visualstudio.com/ 點擊Download for Windows 2.安裝漢化插件和openlayers插件 搜索chinese,下載Chinese (Simplified) (簡體中文) Language Pack 更改語言并重啟 搜…

最新版DataGrip超詳細圖文安裝教程,帶補丁包(2025最新版保姆級教程)

目錄 前言 一、DataGrip最新版下載 二、DataGrip安裝 三、DataGrip補丁 四、運行DataGrip 前言 DataGrip 是由 JetBrains 公司開發的一款專業的跨平臺數據庫管理工具,主要用于連接、管理和操作多種主流關系型數據庫及部分 NoSQL 數據庫。它支持 MySQL、Postgre…

25年時代電服社招入職Verify測評SHL題庫語言理解數字推理考什么?

寧德時代語言理解 語言理解部分主要考察應聘者的語言表達和邏輯思維能力,題型包括閱讀理解、邏輯填空和語句排序。閱讀理解要求應聘者快速捕捉文章的主旨和細節信息,能夠迅速把握文章的核心觀點;邏輯填空需要在給定的語句中填入最合適的詞匯…

QML 彈窗控件:Popup的基本用法與樣式

目錄 引言相關閱讀Popup基本屬性工程結構示例實現Main.qml - 主界面SimplePopup.qml - 簡單彈窗ModalPopup.qml - 模態彈窗CustomPopup.qml - 自定義樣式彈窗AnimatedPopup.qml - 帶動畫的彈窗 總結工程下載 引言 在現代圖形用戶界面(GUI)開發中,彈窗(Popup)是一種…

SkyWalking + ELK 全鏈路監控系統整合指南

一、架構設計圖 二、核心組件部署 1. SkyWalking 集群部署 yaml: # docker-compose-skywalking.yml version: 3.8services:oap:image: apache/skywalking-oap-server:9.7.0ports:- "11800:11800" # gRPC- "12800:12800" # HTTPenvironment:SW_STORAGE: …

DP主站如何華麗變身Modbus TCP網關!

DP主站如何華麗變身Modbus TCP網關! 在工業自動化領域,Profibus DP和Modbus TCP是兩種常用的通信協議。Profibus DP通常應用于制造業自動化場景,而Modbus TCP則廣泛使用于工業自動化和樓宇自動化等領域。為了實現這兩種協議之間的互聯互通&a…

AI | 字節跳動 AI 中文IDE編輯器 Trae 初體驗

Trae 簡介與安裝 🔦 什么是 Trae Trae 是大廠字節跳動出品的國內首個 AI IDE,深度理解中文開發場景。AI 高度集成于 IDE 環境之中,為你帶來比 AI 插件更加流暢、準確、優質的開發體驗。說是能夠不用寫代碼,全靠一張嘴跟 AI 聊天…

Web3 的云基礎設施正在成型,Polkadot 2.0 用三項技術改寫“上鏈成本”

在Web3基礎設施內卷加劇的今天,“如何以更低成本、更大靈活性部署一條高性能應用鏈”正成為開發者們最關心的問題。而剛剛走出“技術慢熱”誤區的Polkadot,正在用一套名為 Polkadot 2.0 的架構升級方案,重新定義這一問題的解法。 這套升級最…

【Linux】39.一個基礎的HTTP Web服務器

文章目錄 1. 實現一個基礎的HTTP Web服務器1.1 功能實現:1.2 Log.hpp-日志記錄器1.3 HttpServer.hpp-網頁服務器1.4 Socket.hpp-網絡通信器1.5 HttpServer.cc-服務器啟動器 1. 實現一個基礎的HTTP Web服務器 1.1 功能實現: 總體功能: 提供We…

沐渥科技詳解氮氣柜操作指南

氮氣柜是一種通過持續注入高純度氮氣,維持柜內惰性氣體環境的設備,用于存儲半導體晶圓或其他敏感元件,防止氧化、吸濕和污染。氮氣柜操作指南是怎樣的?下面沐渥小編給大家介紹一下。 一、操作前準備 (1)安全…

從零實現Agent智能體配置使用(Ragflow)

從零實現Agent智能體配置使用(Ragflow) 1. 創建智能體2. 配置智能體2.1 配置問題識別2.2 配置問題分類2.3 不同問題進行單獨配置2.4 保存Agent 3. 體驗效果 1. 創建智能體 2. 配置智能體 2.1 配置問題識別 2.2 配置問題分類 2.3 不同問題進行單獨配置 當…

顯示器各類異常處理方法

顯示器各類異常處理方法 導航 文章目錄 顯示器各類異常處理方法導航畫面無顯示/黑屏/無HDMI信號輸入顯示器閃爍顯示器花屏顯示畫面模糊或扭曲顯示器顏色異常顯示器出現死點或亮點 畫面無顯示/黑屏/無HDMI信號輸入 ? 首先應該檢查的是顯示器電源(真的有人弄掉電源…

原理剖析 + 實戰教程 + 資源優化總結大模型微調實戰:LoRA / QLoRA / PEFT 全解析,教你低成本玩轉大模型微調

隨著大語言模型(LLM)在自然語言處理各領域取得突破性進展,越來越多開發者和企業開始關注模型的微調方式。然而,全參數微調不僅成本高昂、資源要求極高,還容易引發過擬合與知識遺忘等問題。為此,LoRA、QLoRA…

Higress: 阿里巴巴高性能云原生API網關詳解

一、Higress概述 Higress是阿里巴巴開源的一款基于云原生技術構建的高性能API網關,專為Kubernetes和微服務架構設計。它集成了Ingress控制器、微服務網關和API網關功能于一體,支持多種協議和豐富的流量管理能力。 發展歷程 Higress 從最初社區的 Isti…

解決 IntelliJ IDEA 中 Maven 項目左側項目視圖未顯示頂層目錄問題的詳細步驟說明

以下是解決 IntelliJ IDEA 中 Maven 項目左側項目視圖未顯示頂層目錄問題的詳細步驟說明: 1. 切換項目視圖模式 默認情況下,IDEA 的項目視圖可能處于 Packages 模式,僅顯示代碼包結構,而非物理目錄。 操作步驟: 點擊…

【Vue-vue基礎知識】學習筆記

目錄 <<回到導覽vue基礎知識1.1.創建一個vue實例1.2.vue基礎指令1.2.1.v-bind1.2.2.v-model1.2.3.常用事件1.2.4.指令修飾符 1.3.計算屬性1.3.1.計算屬性的完整寫法1.3.2.【案例】成績 1.4.watch1.4.1.watch屬性1.4.2.翻譯業務實現1.4.3.watch屬性的完整寫法1.4.4.【案例…