算法 ----- 鏈式

目錄

一 、鏈式

二 、題目

1、兩兩相加

(1)題目

(3) 代碼書寫

?2、兩兩交換鏈表中的節點

(1)題目

(2) 解題思路

(3)代碼書寫?

3、重排鏈表

(1)題目

(2)解題思路

(3)代碼實現

4、合并K個升序鏈表? ?

(1)題目

?(2)解題思路

(3)代碼解答

5、K個一組反轉鏈表?

(1)題目

?(2)解題思路

(3)代碼實現


一 、鏈式

利用鏈表來解決問題

二 、題目

1、兩兩相加

(1)題目

(3) 代碼書寫

/*** 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:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2){ListNode* cur1 = l1;ListNode* cur2 = l2;ListNode* head = new ListNode(0);int t =0; ListNode* pur = head;while(cur1||cur2||t){if(cur1){t+= cur1->val;cur1 = cur1->next;}if(cur2){t+= cur2->val;cur2 = cur2->next;}pur->next = new ListNode(t%10);pur = pur -> next;t/=10;}ListNode* pcur = head -> next;delete head;return pcur;}};

?2、兩兩交換鏈表中的節點

(1)題目

(2) 解題思路

我們也可通過定義四個指針,改變她們的next值來交換結點

邊界值為

(3)代碼書寫?

/*** 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:ListNode* swapPairs(ListNode* head){ListNode* prevhead = new ListNode(0);prevhead -> next = head;if(head == nullptr || head -> next == nullptr){return head;}ListNode* prev = prevhead, *cur = head, *pnext = head -> next, *nnext = pnext->next;while(pnext&&cur){prev->next = pnext;pnext ->next = cur;cur->next = nnext;prev = cur;cur = prev->next;if(nnext)pnext = nnext->next;if (pnext) nnext = pnext ->next;}cur = prevhead ->next;delete prevhead;return cur;}
};

3、重排鏈表

(1)題目

(2)解題思路

1、找到鏈表的中間

? ? ? 快慢指針

2、逆序后半段的指針(斷開兩端的指針)

? ? ? ?雙指針

3、將兩端指針鏈接

? ? ? 雙指針

(3)代碼實現

/*** 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) {ListNode *slow = head;ListNode *fast = head;while(fast && fast->next){slow = slow -> next;fast = fast -> next -> next;}ListNode* newhead = new ListNode(0);ListNode *ret = slow -> next;slow -> next = nullptr; while(ret){ListNode *next = ret -> next;ret -> next = newhead -> next;newhead -> next = ret;ret = next; }ListNode* re = new ListNode(0);ListNode *cur1 = head;ListNode *prev = re;ListNode *cur2 = newhead -> next;while(cur1){prev -> next = cur1;prev = prev -> next;cur1 = cur1 -> next;if(cur2){prev->next = cur2;prev = prev -> next;cur2 = cur2 -> next;}}delete newhead;delete re;}
};

4、合并K個升序鏈表? ?

(1)題目

?(2)解題思路

解題思路一:我們可以設一個優先級隊列,將各個鏈表頭入列,在創建一個鏈表最小鏈入鏈表中

在讓它的頭出對列

解法思路二:歸并我們可以通過歸并將鏈表分為兩個,在將兩個鏈表進行排序

(3)代碼解答

思路一代碼:

/*** 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 
{struct cmp{bool operator()(const ListNode* l1,const ListNode* l2){return l1->val > l2->val;}};
public:ListNode* mergeKLists(vector<ListNode*>& lists) {priority_queue<ListNode* , vector<ListNode*>, cmp> heap;for(auto e : lists){if(e){heap.push(e);}}ListNode *head = new ListNode(0);ListNode *cur = head;while(!heap.empty()){cur->next = heap.top();cur = cur -> next;heap.pop();if(cur->next)heap.push(cur->next);}cur= head->next;delete head;return cur;}
};

?思路二解答:

?

5、K個一組反轉鏈表?

(1)題目

?(2)解題思路

解題思路一:我們可以首先算出來有我們需要反轉幾次,然后我們就可以將他看作為幾個逆置

(3)代碼實現

/*** 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:ListNode* reverseKGroup(ListNode* head, int k) {int n = 0;ListNode *cur = head;while(cur){cur= cur->next;n++;}n/=k;ListNode* newhead = new ListNode(0);ListNode *prev = newhead;cur = head;for(int j = 0; j < n; j++){ListNode* tmp = cur;for(int i = 0; i < k ;i++){ListNode *next = cur->next;cur -> next  = prev -> next;prev -> next = cur;cur = next;}prev = tmp;}prev ->next = cur;cur = newhead -> next;delete newhead;return cur;}
};

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

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

相關文章

運維監控prometheus+grafana

目錄 一、環境 二、Node_exporter部署 三、Prometheus部署 四、Grafana部署 五、驗證、使用 一、環境 系統使用CentOS7虛擬機。 監控三臺服務器&#xff1a; 192.168.114.10 Node1 #部署Prometheus、node_exporter、Grafana 192.168.114.20 Node2 …

數字孿生 :提高制造生產力的智能方法

近年來&#xff0c;在先進數字技術深度整合的推動下&#xff0c;制造業經歷了深刻變革。數字孿生技術作為其中最具前景的創新之一&#xff0c;正重塑工廠和生產流程的設計、監控和優化方式。該技術的核心在于為物理資產、系統或流程創建虛擬映射。這種虛擬映射實時同步現實世界…

【論文閱讀】-《SIGN-OPT: A QUERY-EFFICIENT HARD-LABEL ADVERSARIAL ATTACK》

Sign-OPT: 一種查詢高效的硬標簽對抗攻擊 原文鏈接&#xff1a;https://arxiv.org/pdf/1909.10773 摘要 我們研究在訪問受限情況下評估機器學習系統對抗魯棒性的最實用問題設置&#xff1a;用于生成對抗樣本的硬標簽黑盒攻擊設置&#xff0c;其中允許有限的模型查詢&#xff…

安卓11 12系統修改定制化_____如何去掉 搜狗輸入法 首次運行時權限授權彈窗 其他應用可借鑒

有些內置應用或者第三方應用在首次使用時會跳出權限允許彈窗。雖然這個是系統為了用戶安全設置的一道檢測機制。但無形之中會影響到定制類用戶的使用。那么能不能去除這個首次運行的權限彈窗呢。其實也有多方法可參閱解決。 通過博文了解?????? 1??????-----首次…

雙環模型:一個蘊含安全哲學的類設計解析

雙環模型&#xff1a;一個蘊含安全哲學的類設計解析 在編程世界中&#xff0c;優秀的類設計不僅能實現功能需求&#xff0c;更能體現開發者對系統本質的理解。本文將深入剖析一個看似簡單卻蘊含深刻安全哲學的OP類&#xff0c;探討其雙環模型背后的設計思想與實踐價值。 類結構…

牛津大學xDeepMind 自然語言處理(4)

牛津大學xDeepMind 自然語言處理 Natural Language Processing 語音識別 Speech Recognition語音識別概述 問題定義&#xff1a;自動語音識別&#xff08;ASR&#xff09;、文本到語音合成&#xff08;TTS&#xff09;等相關任務&#xff1a;說話人識別、語音增強、語音分離等語…

MyBatis處理SQL語句映射

基礎MyBatis問題以去看MyBatis基礎。 使用log4j設置日志在控制臺打印SQL語句及其執行信息 也可以使用MyBatis基礎中用的slf4j。 在pom.xml文件中引入log4j坐標依賴 <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><…

嵌入式硬件篇---麥克納姆輪軌跡偏移

麥克納姆輪的軌跡偏移是機械結構、驅動系統、控制邏輯及外部環境等多因素共同作用的結果&#xff0c;其核心是各輪子的驅動力 / 運動狀態無法按理論模型實現協同&#xff0c;導致車體實際運動與期望軌跡產生偏差。以下是具體影響因素的詳細分析&#xff1a;一、機械結構偏差&am…

C語言安全函數分享

在日常寫程序中有一些功能函數是可以重復使用的&#xff0c;在c語言的標準庫里面也有對應的功能函數&#xff0c;但是那些功能函數有會有小問題然后我就整理了一下對應功能的安全函數的使用。其中前四個函數可以編譯成一個動態庫&#xff0c;然后在項目工程中只需要包含對應的頭…

汽車之家聯合HarmonyOS SDK,深度構建鴻蒙生態體系

汽車之家作為一家領先的汽車互聯網公司&#xff0c;致力于打造服務全球的汽車生態科技平臺&#xff0c;覆蓋"看選買用換"的一站式購車體驗。2023年12月底&#xff0c;汽車之家正式啟動鴻蒙開發&#xff0c;并于2024年年底成功構建了完整的鴻蒙生態體系&#xff0c;涵…

深度學習驅動的訂單簿分析與交易策略優化

訂單簿數據特征與預處理方法 高頻金融數據中&#xff0c;訂單簿&#xff08;Order Book&#xff09;承載著市場參與者的實時交易意圖。不同于K線數據的聚合特性&#xff0c;訂單簿數據具有獨特的時空特征&#xff1a; 多維層級結構&#xff1a;包含不同價格檔位的買賣盤深度信息…

Redis--day9--黑馬點評--分布式鎖(二)

&#xff08;以下所有內容全部來自上述課程&#xff09; 分布式鎖 1. Redisson功能介紹 基于setnx實現的分布式鎖存在下面的問題&#xff1a; 不可重入&#xff1a;同一個線程無法多次獲取同一把鎖不可重試&#xff1a;獲取鎖只嘗試一次就返回false&#xff0c;沒有重試機…

ES入門教程 (python 版)

ES入門教程 1. 創建ES對象from elasticsearch import Elasticsearch # 實例化一個ip為localhost&#xff0c;端口為9200&#xff0c;允許超時一小時的es對象 es Elasticsearch(hosts"localhost",port9200,timeout3600) # 1. 創建 索引 index_name "test"…

Gateway中Forward配置+源碼觀賞

系列文章目錄 文章目錄系列文章目錄一、ForwardPathFilter二、RouteToRequestUrlFilter三、ForwardRoutingFilteryaml forward配置gateway:routes:- id: user-route # uri: lb://useruri: forward:///user/indexpredicates:- Path/user/**- YoGET # filt…

BAS16XV2T1G ON安森美半導體 高速開關二極管 電子元器件IC

BAS16XV2T1G ON Semiconductor 高速開關二極管專業解析1. 產品技術檔案BAS16XV2T1G是安森美半導體(ON Semiconductor)推出的高速開關二極管&#xff0c;采用SOT-523超微型封裝&#xff08;1.60.80.95mm&#xff09;&#xff0c;專為現代高密度電子設備設計&#xff0c;以其超快…

親測可用 [安卓]《神秘來電》V1.1無需登入無廣告離線打開即用手機模擬發起虛假來電免費版

神秘來電是一款可以模擬虛擬電話的應用程序&#xff0c;它能夠在用戶需要的時候模擬各種來電&#xff0c;以便用戶能夠在尷尬的場合脫身。用戶可以預設多個不同的來電號碼和鈴聲&#xff0c;并可隨時觸發這些虛擬電話&#xff0c;在特殊情況下幫助用戶擺脫尷尬。它為那些社交恐…

8.20 dp

lc73矩陣置零queue隊列標記// 整行置零for(int y0; y<n; y) matrix[i][y] 0; // 整列置零for(int x0; x<m; x) matrix[x][j] 0; class Solution { public:void setZeroes(vector<vector<int>>& matrix) {int m matrix.size(), n matrix[0].size();//…

STL庫——string(類模擬實現)

? ? ? ? ? づ?ど &#x1f389; 歡迎點贊支持&#x1f389; 個人主頁&#xff1a;勵志不掉頭發的內向程序員&#xff1b; 專欄主頁&#xff1a;C語言&#xff1b; 文章目錄 前言 一、基本框架 二、構造函數 三、析構函數 四、拷貝構造 五、運算符重載 5.1、賦值重載 5.2…

Linux I/O 多路復用實戰:深入剖析 Select 與 Poll

## 引言:從“阻塞”的餐廳到“事件驅動”的盛宴 想象一下,你是一家小餐館的服務員。餐廳只有5張桌子。你的工作流程是這樣的:走到1號桌,問他們是否要點菜,然后站在那里等他們決定;等他們點完,再去2號桌,同樣站在那里等... 如果1號桌的客人看菜單看了半個小時,那么其他…

【clion】cmake腳本1:調試腳本并構建Fargo項目win32版本

調試腳本并構建 【clion】visual studio的sln轉cmakelist并使用clion構建32位 報錯 "D:\Program Files\JetBrains\CLion 2022.3.1\bin\cmake\win\x64\bin\cmake.exe" --debugger --debugger-pipe=\\<