leetcode328. 奇偶鏈表,附詳細解析和代碼注釋

leetcode328. 奇偶鏈表

給定單鏈表的頭節點 head ,將所有索引為奇數的節點和索引為偶數的節點分別組合在一起,然后返回重新排序的列表。
第一個節點的索引被認為是 奇數 , 第二個節點的索引為 偶數 ,以此類推。
請注意,偶數組和奇數組內部的相對順序應該與輸入時保持一致。
你必須在 O(1) 的額外空間復雜度和 O(n) 的時間復雜度下解決這個問題。

示例 1:
在這里插入圖片描述
輸入: head = [1,2,3,4,5]
輸出: [1,3,5,2,4]

示例 2:
在這里插入圖片描述
輸入: head = [2,1,3,5,6,4,7]
輸出: [2,3,6,7,1,5,4]

算法的核心思想是通過兩個指針 odd 和 even 來分別遍歷奇數位和偶數位的節點,然后在遍歷的過程中逐步構建新的鏈表,使得奇數位的節點在偶數位的節點之前。

邊界條件檢查:首先,函數檢查 head 是否為 NULL。如果鏈表為空(即 head == NULL),則不需要進行任何操作,直接返回 head。

初始化指針
ListNode* even = head->next; 初始化 even 指針指向第二個節點,即偶數位的第一個節點。
ListNode* odd = head; 初始化 odd 指針指向第一個節點,即奇數位的第一個節點。
ListNode* evenhead = even; 初始化 evenhead 指針,它將用于最后將偶數部分連接到奇數部分的末尾。

鏈表遍歷:使用 while 循環遍歷鏈表,直到 even 或 even->next 為 NULL,即到達鏈表的末尾或偶數位的最后一個節點。
在循環內部,首先將 odd->next 設置為 even->next,這樣 odd 節點就指向了下一個奇數位的節點。
然后將 odd 移動到下一個奇數位。
接著,將 even->next 設置為 odd->next,這樣 even 節點就指向了下一個偶數位的節點。
最后,將 even 移動到下一個偶數位。

連接偶數部分:當循環結束時,odd 指針將指向奇數部分的最后一個節點。此時,將 odd->next 設置為 evenhead,即將偶數部分連接到奇數部分的末尾。

返回結果:最后,函數返回 head,即重排后的鏈表的頭節點。

這個算法的時間復雜度是 O(N),其中 N 是鏈表的長度。這是因為算法只需要遍歷鏈表一次。空間復雜度是 O(1),因為除了輸入參數外,算法只使用了有限的額外空間(幾個指針變量)。
具體代碼如下:

class Solution {public:ListNode* oddEvenList(ListNode* head) {//如果鏈表為空,不用重排if (head == NULL)return head;//even開頭指向第二個節點,可能為空ListNode* even = head->next;//odd開頭指向第一個節點ListNode* odd = head;//指向even開頭ListNode* evenhead = even;while (even != NULL && even->next != NULL) {//odd連接even的后一個,即奇數位odd->next = even->next;//odd進入后一個奇數位odd = odd->next;//even連接后一個奇數的后一位,即偶數位even->next = odd->next;//even進入后一個偶數位even = even->next;}//even整體接在odd后面odd->next = evenhead;return head;}
};

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

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

相關文章

Java的反射機制詳解:動態操作類和對象

Java反射是一種強大的機制,允許程序在運行時查詢和操作類、方法、接口等。這種能力使得Java應用可以在運行時動態地創建對象、調用方法和訪問屬性,極大地提升了程序的靈活性和可擴展性。本文將深入探討Java反射的原理、核心API和實際應用場景&#xff0c…

Flutter 中的 CupertinoSlidingSegmentedControl 小部件:全面指南

Flutter 中的 CupertinoSlidingSegmentedControl 小部件:全面指南 在Flutter框架中,CupertinoSlidingSegmentedControl是一個用于創建類似iOS風格的滑動分段控制器的小部件。這種控制器通常用于允許用戶在不同的視圖或設置之間切換。本文將為您提供一個…

輕量級 K8S 環境 安裝minikube

文章目錄 操作系統DockerDocker CE 鏡像源站使用官方安裝腳本自動安裝 (僅適用于公網環境)安裝校驗Docker代理docker permission denied while trying to connect to the Docker daemon socket minikubekubectl工具minikube dashboard參考資料 操作系統 …

Docker進入容器查看內容并從容器里拷貝文件到宿主機

工作中需要從docker正在運行的鏡像中復制文件到宿主機,于是便將這個過程記錄了下來。 (1)查看正在運行的容器 通過以下命令,可以查看正在運行的容器: docker ps (2)進入某個容器執行腳本 我…

前端人員選擇組件封裝

功能&#xff1a; 人員選擇&#xff0c;返回人員參數&#xff0c;以及人員參數id數組支持單選&#xff0c;多選人員支持重新選擇回顯上次選中人員 <!-- 彈窗 --><a-modal v-model"modalVisible" :footer"null" :bodyStyle"{ padding: 0 }&q…

react中子傳父信息

思路是&#xff1a; 在父組件定義一個函數接受參數&#xff0c;接收的參數用于接收子組件的信息&#xff0c;把函數傳給子組件&#xff0c;子組件調用父親傳來的函數并把要告訴父親的話傳到函數中&#xff0c;就實現了子傳父消息 import { useState } from reactimport { use…

OpenWrt 安裝Quagga 支持ospf Bgp等動態路由協議 軟路由實測 系列四

1 Quagga 是一個路由軟件套件, 提供 OSPFv2,OSPFv3,RIP v1 和 v2,RIPng 和 BGP-4 的實現. 2 web 登錄安裝 #或者ssh登錄安裝 opkg install quagga quagga-zebra quagga-bgpd quagga-watchquagga quagga-vtysh # reboot 3 ssh 登錄 #重啟服務 /etc/init.d/quagga restart #…

使用kubesphere部署微服務的時候,節點的鏡像不是最新的導致部署到舊版本問題

我使用kubesphere部署微服務的時候&#xff0c;發現有很多次&#xff0c;我修改了配置文件&#xff0c;但是部署完才發現部署的是舊版本。 然后我查看了該微服務部署在哪個節點上&#xff1a; kubectl get pods --all-namespaces -o wide例如 gulimall-gateway 這個服務&…

韭菜的自我總結

韭菜的自我總結 股市技術面量價關系左側右側右側技術左側技術洗盤 韭菜的自我修養虛擬貨幣的啟示韭菜的買入時機韭菜的心理壓力成為優秀玩家的關鍵 股市技術面 技術面分析可以作為買賣時機判定的工具&#xff0c;但是投資還是需要基本面的分析作為支撐。也就是基本面選股&…

langchain進階一:特殊的chain,輕松實現對話,與數據庫操作,抽取數據,以及基于本地知識庫的問答

特殊的chain langchain中的Chain有很多,能夠輕松實現部分需求,極致簡化代碼,但是實現效果與模型智慧程度有關 會話鏈 效果與LLMChain大致相同 javascript 復制代碼 from langchain.chains import ConversationChain from langchain_community.llms import OpenAI conversat…

Spring Boot中如何實現定時任務?

在項目開發中&#xff0c;經常需要編寫定時任務來實現一些功能&#xff1a; 定時備份數據庫、定時發送郵件、定時清理數據、定時提醒或通知、信用卡每月還款提醒 未支付的訂單15分鐘之后自動取消、未確認收貨的訂單7天之后自動確認收貨 定時任務的實現&#xff1a; Spring T…

Redis 實戰 - 緩存異常及解決方案

文章目錄 概述一、緩存穿透1.1 緩存穿透是什么1.2 解決方案 二、緩存擊穿2.1 緩存擊穿是什么2.2 解決方案 三、緩存雪崩3.1 緩存雪崩是什么3.2 解決方案 四、拓展4.1 緩存預熱4.2 緩存降級 五、結語 把今天最好的表現當作明天最新的起點……&#xff0e;&#xff5e; 概述 在實…

YoloV8改進策略:Neck層改進、注意力改進|HCANet全局與局部的注意力模塊CAFM|二次創新|即插即用

yolov9-c summary: 620 layers, 52330674 parameters, 0 gradients, 245.5 GFLOPsClass Images Instances P R mAP50 mAP50-95: 100%|██████████| 15/15 00:06all 230 1412 0.917 0.985 0.99 0.735…

實現自動化巡檢多臺交換機并將輸出信息保存到文本文件中

為了實現自動化巡檢多臺交換機并將輸出信息保存到文本文件中,可以擴展之前的 SSHInspectionTool 類,使其能夠處理多臺交換機的連接和命令執行。我們可以使用多線程來并行處理多個 SSH 連接,以提高效率。 目錄 一、導入依賴包 二、編寫Java類 (1)SSH.java (2)SSHIns…

LeetCode 第131場雙周賽個人題解

100309. 求出出現兩次數字的 XOR 值 原題鏈接 求出出現兩次數字的 XOR 值 - 力扣 (LeetCode) 競賽 思路分析 簽到題&#xff0c;一次遍歷 AC代碼 class Solution:def duplicateNumbersXOR(self, nums: List[int]) -> int:cnt Counter(nums)res 0st set(nums)for x …

Python基礎學習筆記(七)——元組

目錄 一、一維元組的介紹、創建與修改二、組合的基本操作1. 遍歷2. 取長度3. 取最值4. 打包5. 批處理5.1 map()函數5.2 lambda 表達式5.3 lambda 表達式 map()函數 一、一維元組的介紹、創建與修改 元組&#xff08;tuple&#xff09;&#xff0c;一種不可變、有序、可重復的數…

SpringBoot如何開啟注解的形式,使用Redis Cache

Spring Cache 是一個框架&#xff0c;實現了基于注解的緩存功能&#xff0c;只需要簡單的添加注解&#xff0c;就能實現緩存功能。 Spring Cache 提供了一層抽象&#xff0c;底層可以切換不同的緩存實現&#xff0c;例如&#xff1a;Redis、EHCache、Caffeine等 步驟&#xf…

【大模型】Spring AI對接ChatGpt使用詳解

目錄 一、前言 二、spring ai介紹 2.1 什么是Spring AI 2.2 Spring AI 特點 2.3 Spring AI 為開發帶來的便利 2.4 Spring AI應用領域 2.4.1 聊天模型 2.4.2 文本到圖像模型 2.4.3 音頻轉文本 2.4.4 嵌入大模型使用 2.4.5 矢量數據庫支持 2.4.6 用于數據工程ETL框架 …

2024-05-22 VS2022使用modules

點擊 <C 語言編程核心突破> 快速C語言入門 VS2022使用modules 前言一、準備二、使用其一, 用VS installer 安裝模塊:第二個選項就是, 與你的代碼一同編譯std模塊, 這個非常簡單, 但是也有坑. 總結 前言 要解決問題: 使用VS2022開啟modules. 想到的思路: 跟著官方文檔整…

Java進階學習筆記19——內部類

1、 內部類&#xff1a; 是類中五大成分之一&#xff08;成員變量、方法、構造函數、內部類、代碼塊&#xff09;&#xff0c;如果一個類定義在另一個 類的內部&#xff0c;這個類就是內部類。 場景&#xff1a;當一個類的內部&#xff0c;包含了一個完整的事物&#xff0c;且…