C++基礎(④鏈表反轉(鏈表 + 迭代 / 遞歸))

鏈表反轉(鏈表 + 迭代 / 遞歸)
題目描述:給你單鏈表的頭節點 head,請你反轉鏈表,并返回反轉后的鏈表頭節點。
示例:輸入鏈表 1→2→3→4→5 → 輸出 5→4→3→2→1。
思路提示:

迭代法:用三個指針 prev(前一個節點,初始 nullptr)、curr(當前節點,初始 head)、next(臨時存儲下一個節點),遍歷鏈表時依次修改 curr->next = prev,再更新三個指針。
遞歸法:遞歸反轉 head 的下一個節點,再將 head 接到反轉后的鏈表尾部,時間復雜度 O (n),空間復雜度 O (n)(遞歸棧)。

#include <iostream>using namespace std;// ---------- 1. 節點定義 ----------
struct ListNode {int val;ListNode* next;ListNode(int v = 0, ListNode* n = nullptr) : val(v), next(n) {}
};// ---------- 2. 迭代法 ----------
ListNode* reverseList_iter(ListNode* head) {ListNode* prev = nullptr;   // 新鏈表的頭ListNode* curr = head;      // 正在處理的節點while (curr) {ListNode* nextTmp = curr->next; // 臨時保存下一個curr->next = prev;             // 反向prev = curr;                   // prev 前進一步curr = nextTmp;                // curr 前進一步}return prev;  // prev 變成新頭節點
}// ---------- 3. 遞歸法 ----------
ListNode* reverseList_recur(ListNode* head) {if (!head || !head->next) return head;   // 空或最后一個節點ListNode* newHead = reverseList_recur(head->next); // 先反轉后面的鏈表head->next->next = head;   // 把當前節點接到已反轉部分的尾巴head->next = nullptr;      // 防止成環return newHead;
}// ---------- 4. 輔助:打印鏈表 ----------
void printList(ListNode* head) {for (ListNode* p = head; p; p = p->next)cout << p->val << (p->next ? "→" : "");cout << endl;
}// ---------- 5. 測試 ----------
int main() {// 構造 1→2→3→4→5ListNode* head = new ListNode(1);head->next = new ListNode(2);head->next->next = new ListNode(3);head->next->next->next = new ListNode(4);head->next->next->next->next = new ListNode(5);cout << "Original: "; printList(head);// 迭代版ListNode* newHead_iter = reverseList_iter(head);cout << "Reversed (iter): "; printList(newHead_iter);// 遞歸版(再反轉回來演示)ListNode* newHead_recur = reverseList_recur(newHead_iter);cout << "Re-reversed (recur): "; printList(newHead_recur);return 0;
}

拆解 1:構造函數的參數與默認值
構造函數 ListNode(int v = 0, ListNode* n = nullptr) 有兩個參數:

int v:用于初始化 val(節點數據),默認值為 0
ListNode* n:用于初始化 next(下一個節點指針),默認值為 nullptr(空指針)

默認參數的作用:調用構造函數時,可以不傳參數、傳 1 個參數或傳 2 個參數,非常靈活。

拆解 2:初始化列表 : val(v), next(n)
這是 C++ 的初始化列表語法,作用是在構造函數體執行前,直接初始化成員變量:

val(v):將成員變量 val 初始化為參數 v 的值
next(n):將成員變量 next 初始化為參數 n 的值

相比在構造函數體內賦值(如 val = v;),初始化列表更高效,尤其適合 const 成員或自定義類型成員的初始化。

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

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

相關文章

面向企業級產品開發的自動化腳本實戰

引言&#xff1a; 在產品開發團隊中&#xff0c;設計師、產品經理和工程師之間的協作常常伴隨著大量重復性工作&#xff1a;手動整理設計稿鏈接、更新產品需求文檔、同步項目狀態...這些工作不僅耗時&#xff0c;還容易出錯。本文將帶你編寫一個Python腳本&#xff0c;自動化這…

科技賦能生態,智慧守護農林,匯嶺生態開啟農林產業現代化新篇章

在我國&#xff0c;農林業作為國民經濟的基礎產業&#xff0c;不僅關乎國家糧食安全與生態平衡&#xff0c;更是鄉村振興戰略實施的核心領域。近年來&#xff0c;國家高度重視“三農”問題&#xff0c;大力推進鄉村振興戰略&#xff0c;強調要實現農業農村現代化&#xff0c;促…

貪心算法面試常見問題分類解析

一、貪心算法問題 1. 跳躍游戲系列 能否到達終點: def canJump(nums):max_reach = 0for i in range(len(nums)):if i > max_reach:return Falsemax_reach = max(max_reach, i + nums[i])return True 最少步數: def jump(nums):jumps = end = max_pos = 0for i in range(l…

【3D入門-指標篇上】3D 網格重建評估指標詳解與通俗比喻

一、指標對比表格指標名稱核心定義計算關鍵步驟通俗比喻典型應用場景Chamfer距離雙向平均幾何距離采樣點→計算最近鄰距離→取平均沙灘沙粒的平均距離差評估服裝輪廓、褶皺的細微差異法向量一致性表面法向量方向匹配度計算法向量點積→取絕對值→平均刺猬刺的朝向一致程度評估布…

補題報告08

題目背景某天&#xff0c;奇異博士在紐約圣所研究維山帝之書時&#xff0c;發現了連接不同多元宇宙的傳送門網絡......題目描述經研究&#xff0c;奇異博士發現每個傳送門都有固定的 “時間代價”—— 正數表示雙向通行&#xff08;往返時間代價相同均為正值&#xff09;&#…

馬斯克殺入AI編程!xAI新模型Grok Code Fast 1發布,深度評測:速度、價格與API上手指南

AI 編程的賽道&#xff0c;又迎來一位重量級玩家——馬斯克的 xAI。 就在最近&#xff0c;xAI 悄然發布了一款專為編碼而生的新模型&#xff1a;Grok Code Fast 1。這款模型最初以代號“Sonic”在內部流傳&#xff0c;如今正式亮相&#xff0c;便憑借其 256K 超長上下文、驚人的…

GaussDB 數據庫架構師修煉(十八) SQL引擎-計劃管理-SPM

1 背景由于業務數據的變化或者數據庫版本的升級&#xff0c;可能導致SQL的執行計劃發生變化&#xff0c;這種變化不一定是正收益&#xff0c;這時需 要一個防止計劃劣化的機制。該機制需適用于版本升級時固化計劃防止計劃跳變等場景。2 SPM 的功能SPM(SQL Plan Manager)功能&a…

數字IC前端設計——前仿篇(VCS,DVE,Verdi)

文章目錄引言一、軟件介紹1. VCS2. DVE3. Verdi二、VCS的使用1. VCS的編譯流程2. 常用的編譯選項1&#xff09;基礎編譯選項2&#xff09;調試相關選項3&#xff09;性能優化選項4&#xff09;文件和路徑選項3. 常用仿真選項1&#xff09;基礎仿真選項2&#xff09;運行控制選項…

20250826--inter

一、非對稱加密的應用 非對稱加密應用-CSDN博客 2、怎么避免跨站腳本攻擊&#xff0c;包括還有其他的一些web安全&#xff0c;怎么做的 網頁安全XSS攻擊和CSRF攻擊_csrf共計-CSDN博客 3、前端異常監控&#xff0c;性能監控&#xff0c;埋點&#xff0c;怎么做的 &#xff1f…

MongoDB Shell

MongoDB官方提供的單獨命令行工具 MongoDB Shell Download | MongoDB 下載MongoDB Shell windows系統打開&#xff0c;直接在解壓后的目錄里面找到bin目錄 然后雙擊打開mongosh.exe這個文件 看到這個命令行就表示Mongo Shell已經啟動成功了 test代表 當前正在使用的數據庫的…

Docker03-知識點整理

Docker03-知識點整理 文章目錄Docker03-知識點整理1-參考網址2-知識整理2-思考題1-Docker image和Docker Native image有什么區別1. Docker Image&#xff08;Docker 鏡像&#xff09;定義特點構建和使用示例2. Docker Native Image&#xff08;通常指 GraalVM Native Image 結…

華為 eNSP 從入門到精通:企業級網絡仿真全攻略

一、eNSP 簡介華為 eNSP&#xff08;Enterprise Network Simulation Platform &#xff09;是面向企業網絡的虛擬化仿真平臺&#xff0c;其核心架構基于分布式虛擬化引擎和真實設備鏡像&#xff0c;具備以下技術亮點&#xff1a;高度仿真&#xff1a;可模擬華為 AR 路由器、x7 …

docker compose設置命令別名的方法

docker compose名字比較長&#xff0c;輸入比較費事&#xff0c;可以為它設置別名來簡化輸入。1、Linux編輯~/.bash_aliasesalias dcdocker-compse編輯~/.bashrc&#xff0c;確認其包含以下內容&#xff1a;if [ -f ~/.bash_aliases ]; then. ~/.bash_aliasesfi重新加載 ~/.bas…

【RAGFlow代碼詳解-10】文本處理和查詢處理

概述 文本處理和查詢處理系統將自然語言查詢轉換為與 RAGFlow 的文檔存儲后端配合使用的優化搜索表達式。該系統支持中英文文本處理&#xff0c;具有專門的標記化、術語加權和查詢增強技術。核心組件 FulltextQueryer 類 FulltextQueryer 類是查詢處理和文本分析的主要接口。它…

利用機器學習優化Backtrader策略原理與實踐

1. Backtrader框架概述 1.1 Backtrader簡介 Backtrader是一個功能強大且靈活的Python庫&#xff0c;專為量化交易策略的開發、測試和執行而設計。它提供了豐富的功能&#xff0c;包括數據獲取、策略開發、回測、優化和繪圖等。Backtrader的核心優勢在于其模塊化設計和高度可擴展…

CPTS-Pressed復現(XML-RPC)

該box主要是了解wordpress-XML-RPC 的使用 端口掃描只有80端口開啟 可以使用wpscan進行掃描發現bak文件得到憑證&#xff0c;嘗試登陸&#xff08;這里是將原密碼的2021修改為2022嘗試登陸&#xff0c;該主機發布時間為2022年&#xff09;發現有2FA&#xff0c;但是能夠濫用 xm…

【機器學習深度學習】Embedding 與 RAG:讓 AI 更“聰明”的秘密

目錄 前言 一、RAG 的兩大階段 1. 知識庫構建階段 2. 查詢檢索與生成階段 二、為什么 RAG 比單純大模型更靠譜&#xff1f; 四、Embedding 在 RAG 中的作用 五、Embedding 的優勢 六、Embedding 的挑戰 七、RAG 優勢與挑戰對比 八、應用場景舉例 總結 前言 在大模型…

python 轉偶數

目錄 python變量轉偶數 box轉偶數 python變量轉偶數 x1 int(x1) // 2 * 2 y1 int(y1) // 2 * 2 x2 int(x2) // 2 * 2 y2 int(y2) // 2 * 2 box轉偶數 def save_mp4(output_path,box_list,img_list,clip_start,clip_end):writer imageio.get_writer(output_path,fps30,c…

Linux - 中文顯示亂碼問題解決方法(編碼查看及轉換)- 學習/實踐

1.應用場景 主要用于Linux中文顯示亂碼問題解決(編碼查看及轉換&#xff09; 2.學習/操作 1.文檔閱讀 Linux中文顯示亂碼問題解決方法(編碼查看及轉換&#xff09; - 整合俠 - 博客園 截圖&#xff1a; 2.整理輸出 TBD 后續補充 ... 3.問題/補充 TBD 后續補充 ...…

網絡_協議

關鍵詞&#xff1a; OSI是Open System Interconnect的縮寫&#xff0c;意為開放式系統互聯。 RTT &#xff1a; Round-Trip time 往返時間 RTO&#xff1a;Retransmission Timeout超時重傳時間 MSL : OSI 七層模型和 TCP/IP 四層模型 OSI七層模型和TCP/IP五層模型&#…