【數據結構OJ題】鏈表分割

原題鏈接:https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70?tpId=8&&tqId=11004&rp=2&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking

目錄

1. 題目描述

2. 思路分析

3. 代碼實現


1. 題目描述

2. 思路分析

整體思路:創建兩個鏈表,分別存放小于x的結點大于等于x的結點分別進行尾插

這道題目使用哨兵位會更簡單,原因如下(能避開很多為空的情況):

(1)使用哨兵位就不需要考慮兩個鏈表尾插時為空的情況。

(2)兩個鏈表鏈接時也不需要考慮是否為空的情況。

(3)哪怕有一個鏈表為空,也有哨兵位的頭結點,正常鏈接即可。

我們用結構體指針lheadltail分別表示值小于x的那一條鏈表,用結構體指針gheadgtail表示值大于等于x的那一條鏈表。

用malloc()函數分別申請兩個結點,也就是兩個鏈表的哨兵位,讓lhead和ltail一開始指向其中一個,ghead和gtail一開始指向另一個。

再創建一個結構體指針cur用來遍歷原鏈表,我們采用了while循環,當cur不為空時遍歷結點。

結點的值小于x時,我們將這個結點尾插到第一個鏈表(ltail->next=cur)。再讓ltai往后走一步(ltai=ltail->next)。

結點的值大于等于x時,我們將結點尾插到第二個鏈表(gtail->next=cur)。再讓gtail往后走一 一步(gtail=gtail->next)。

尾插一個結點后讓cur往后走一步cur=cur->next)。當cur為空時停止循環

然后將兩個鏈表鏈接起來。(ltail->next=ghead->next)。

有一點需要非常注意!!!

將gtail->next=NULL

否則可能會出現環。

因為現在lhead指向的是哨兵位,所以我們要將lhead往后走一步lhead=lhead->next)。

因為怕找不到lhead的下一個位置,所以我們引入一個結構體指針head保存lhead的下一個位置。(struct ListNode *head=lhead->next)。

然后為了防止內存泄漏,我們要用free()釋放掉兩個哨兵位(即free(lhed)free(ghead))。

最后返回head即可

3. 代碼實現

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};*/
class Partition {
public:ListNode* partition(ListNode* pHead, int x) {struct ListNode *lhead,*ltail,*ghead,*gtail;lhead=ltail=(struct ListNode*)malloc(sizeof(struct ListNode));ghead=gtail=(struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode *cur=pHead;while(cur){if(cur->val<x){ltail->next=cur;ltail=ltail->next;}else{gtail->next=cur;gtail=gtail->next;}cur=cur->next;}ltail->next=ghead->next;//不空,可能導致出現環gtail->next=NULL;struct ListNode *head=lhead->next;free(lhead);free(ghead);return head;}
};

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

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

相關文章

AMD卡啟動Stable Diffusion AI繪畫的方法

WindowsAMD安裝法 1.安裝python 3.10.6&#xff0c;在python官網上下載安裝程序&#xff0c;***重要*** 在安裝的第一個窗口下方勾選“將python添加到path”。 2.安裝git 3.WindowsAMD使用AUTOMATIC1111的directml這一個fork&#xff0c;在這個頁面的第一段&#xff1a;https:/…

題目:2614.對角線上的質數

??題目來源&#xff1a; leetcode題目&#xff0c;網址&#xff1a;2614. 對角線上的質數 - 力扣&#xff08;LeetCode&#xff09; 解題思路&#xff1a; 遍歷對角線上的元素&#xff0c;返回最大的質數或 0 即可。 解題代碼&#xff1a; class Solution {public int dia…

e.target.value和 binding.value 區別

e.target.value 和 binding.value 都是在 Vue.js 中用于處理事件綁定時的值&#xff0c;但它們的使用場景和含義有所不同&#xff0c;分別用于普通的 DOM 事件和自定義指令。 e.target.value&#xff1a; 這是常用于原生 DOM 事件處理函數中的一個屬性&#xff0c;用于獲取事件…

爬蟲逆向實戰(十七)--某某丁簡歷登錄

一、數據接口分析 主頁地址&#xff1a;某某丁簡歷 1、抓包 通過抓包可以發現數據接口是submit 2、判斷是否有加密參數 請求參數是否加密&#xff1f; 通過查看“載荷”模塊可以發現有一個enPassword加密參數 請求頭是否加密&#xff1f; 通過查看請求頭可以發現有一個To…

【面試高頻題】難度 3/5,字典樹熱門運用題

題目描述 這是 LeetCode 上的 「745. 前綴和后綴搜索」 &#xff0c;難度為 「困難」。 Tag : 「字典樹」 設計一個包含一些單詞的特殊詞典&#xff0c;并能夠通過前綴和后綴來檢索單詞。 實現 WordFilter 類&#xff1a; WordFilter(string[] words) 使用詞典中的單詞 words 初…

單片機之從C語言基礎到專家編程 - 4 C語言基礎 - 4.9 變量與常量

基本數據類型可以作為變量與常量使用,顧名思義&#xff0c;變量運行時可以改變其值&#xff0c;常量運行時不會改變其值。 常量分為整型常量、浮點型常量、字符常量、字符串常量和符號常量。 通常用#define來定義一個標識符來表示一個常量 用type name 常量來定義一個變量,…

無法將“環境變量”項識別為 cmdlet、函數、腳本文件或可運行程序的名稱(pycharm)

無法將“配置的任何一個環境變量”項識別為 cmdlet、函數、腳本文件或可運行程序的名稱。 記錄解決“無法將“C:......conda.exe”項識別為 cmdlet、函數、腳本文件或可運行程序的名稱”以及“表達式或語句中包含意外的標記”的系列問題(VSCode開發環境)一、Conda.exe無法正常識…

ROS2 學習(三)話題

話題 節點之間的通信。 叫話題很形象。發布者發布一定數據類型的話題&#xff0c;訂閱者訂閱發布者。 訂閱者發布者不唯一。 異步通信&#xff0c;適用于周期發布的數據而不是邏輯性強的數據。 .msg 格式的消息結構&#xff0c;一種通信接口。 每個話題 topic 有話題名&a…

【Java高級開發高頻面試題】面試者角度的口述版

文章目錄 1.具備扎實的Java基礎集合HashMap底層工作原理HashMap版本問題HashMap并發修改異常HashMap影響HashMap性能的因素HashMap使用優化 SynchronizedThreadLocalAQS線程池JVM內存模型類加載機制與雙親委派垃圾回收算法、垃圾回收器、空間分配擔保策略引用計數器算法、可達性…

創建 Web 內容目錄

創建 Web 內容目錄 按照下方所述&#xff0c;創建一個名為 /home/curtis/ansible/webcontent.yml 的 playbook &#xff1a; 該 playbook 在 dev 主機組中的受管節點上運行 創建符合下列要求的目錄 /webdev &#xff1a; 所有者為 webdev 組 具有常規權限&#xff1a;ownerread…

Nginx反向代理

目錄 一.簡介1.反向代理 二.案例1.案例12.案例2 一.簡介 1.反向代理 1.1反向代理&#xff1a; 是指代理服務器來接收Internet上的客戶端請求&#xff0c;然后將請求轉發給內部網絡上的服務器&#xff0c;并將從服務器上得到的結果返回給客戶端。此時代理服務器對外就表現為一…

循環隊列的實現(c語言)

前言 循環隊列是隊列的一種特殊的結構&#xff0c;在生產者——消費者模型中常常使用它&#xff0c; 它在邏輯上是一個環形的連續的結構。在物理可以使用數組來實現。 目錄 1.循環隊列的邏輯結構 2.空的循環隊列和滿的循環隊列 3.循環隊列插入和刪除 4.代碼實現 …

淺談Redis的maxmemory設置以及淘汰策略

推薦閱讀 AI文本 OCR識別最佳實踐 AI Gamma一鍵生成PPT工具直達鏈接 玩轉cloud Studio 在線編碼神器 玩轉 GPU AI繪畫、AI講話、翻譯,GPU點亮AI想象空間 資源分享 「java、python面試題」來自UC網盤app分享&#xff0c;打開手機app&#xff0c;額外獲得1T空間 https://dr…

音視頻實時通話解決方案

1、問題提出 想要實現音視頻通話,對于大部分人可能會覺得很難,但是實際上,有些事情并沒有大家想的那樣困難,只要功夫深,鐵杵磨成針。 機緣巧合下,在業務中,我也遇到了一個業務場景需要實現音視頻通話,我們不可能自己從零開始干,我本次用到的核心是WebRTC。 2、WebRT…

治療偏頭痛等亞疼痛的遠程電神經調控(REN)設備

原文鏈接&#xff1a; NERIVIO CE標志適應癥擴展到青少年和成人偏頭痛的預防和急性治療 (prnewswire.com) 公司官網&#xff1a; Homepage - Theranica APP下載鏈接&#xff1a; Migraine Headache Treatment - Nerivio 使用過程問題&#xff1a; 常見問題 - 無藥物偏頭痛兩…

統計XML標注文件中各標注類別的標簽數量

目標檢測任務重&#xff0c;擔心數據集中各標簽類別不均衡&#xff0c;想統計XML標注文件中各標注類別的標簽數量&#xff0c;可以使用以下腳本&#xff1a; import os import glob import xml.etree.ElementTree as etdef count_labels(source_dir):file_list glob.glob(os.…

Flink狀態和狀態管理

1.什么是狀態 官方定義&#xff1a;當前計算流程需要依賴到之前計算的結果&#xff0c;那么之前計算的結果就是狀態。 這句話還是挺好理解的&#xff0c;狀態不只存在于Flink&#xff0c;也存在生活的方方面面&#xff0c;比如看到一個認識的人&#xff0c;如何識別認識呢&am…

神經網絡基礎-神經網絡補充概念-24-隨機初始化

由來 在神經網絡的訓練過程中&#xff0c;權重和偏差的初始值對模型的性能和訓練過程的收斂速度都有影響。隨機初始化是一種常用的權重和偏差初始值設置方法&#xff0c;它有助于打破對稱性&#xff0c;避免網絡陷入局部最優解。 概念 當所有權重和偏差都被設置為相同的初始…

Python Web框架:Django、Flask和FastAPI巔峰對決

今天&#xff0c;我們將深入探討Python Web框架的三巨頭&#xff1a;Django、Flask和FastAPI。無論你是Python小白還是老司機&#xff0c;本文都會為你解惑&#xff0c;帶你領略這三者的魅力。廢話不多說&#xff0c;讓我們開始這場終極對比&#xff01; Django&#xff1a;百…

web基礎入門和php語言基礎入門 二

web基礎入門和php語言基礎入門 二 MySQL入門-續MySQL之數據查詢操作MySQL其他知識點 php語言基礎入門認識PHPPHP的工作流程安裝PHP環境認識一個PHP程序PHP基礎知識點進入正題 PHP與WEB交互PHP與MySQL交互總結 MySQL入門-續 MySQL之數據查詢操作 WHERE 子句&#xff0c;條件限…