代碼隨想錄-DAY④-鏈表——leetcode 24 | 19 | 142

24

思路

如果?pre 的后面沒有節點或者只有一個節點,則沒有更多的節點需要交換,

否則,通過更新節點的指針關系交換?pre 后面的兩個節點,

最后,返回新的鏈表的頭節點?dummyhead->next。

  • 時間復雜度:O(n)

  • 空間復雜度:O(1)

代碼

/*** 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 *dummyhead = new ListNode(0, head);ListNode *pre = dummyhead, *cur = head, *ahead;while(pre->next!=nullptr && pre->next->next!=nullptr){ahead = cur->next;cur->next = ahead->next;ahead->next = cur;pre->next = ahead;pre = cur;cur = cur->next;}ListNode* ans = dummyhead->next;delete dummyhead;return ans;}
};

19

思路

讓 fast 先移動n步,然后讓 fast 和 slow 同時移動,

直到 fast 指向鏈表末尾,刪掉slow所指向的節點。

使用虛擬頭結點,方便處理刪除實際頭結點的邏輯,

注意空間清理。

  • 時間復雜度:O(n)

  • 空間復雜度:O(1)

代碼

/*** 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* removeNthFromEnd(ListNode* head, int n) {ListNode *dummyhead = new ListNode(0, head);ListNode *fast=head, *slow=dummyhead, *temp, *ans;while(n--){fast=fast->next;}while(fast!=nullptr){fast=fast->next;slow=slow->next;}temp=slow->next;slow->next=slow->next->next;ans = dummyhead->next;delete temp;delete dummyhead;return ans;}
};

142

思路

設鏈表中環外部分的長度為 a。slow 指針進入環后,又走了 b 的距離與 fast 相遇。此時,fast 指針已經走完了環的 n 圈,因此它走過的總距離為 a+n(b+c)+b=a+(n+1)b+nc。

根據題意,任意時刻,fast 指針走過的距離都為 slow 指針的 2 倍。

因此,我們有 a+(n+1)b+nc=2(a+b)?a=c+(n?1)(b+c)
有了 a=c+(n?1)(b+c) 的等量關系,我們會發現:從相遇點到入環點的距離加上 n?1 圈的環長,恰好等于從鏈表頭部到入環點的距離。

因此,當發現 slow 與 fast 相遇時,我們再額外使用一個指針 ptr。起始,它指向鏈表頭部;隨后,它和 slow 每次向后移動一個位置。最終,它們會在入環點相遇。

詳見官方題解:

. - 力扣(LeetCode)

時間復雜度:O(N)

空間復雜度:O(1)

代碼

更更更

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

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

相關文章

buuctf面具下的flag

細節: 這道題可能因為是vmdk的原因 導致在window上 7z無法得到全部的信息 所以最后解壓要在linux系統上 解密網站 Brainfuck/Ook! Obfuscation/Encoding [splitbrain.org] 這道題010打開,可以發現里面隱藏了很多 binwalk解壓 兩個文件 vmdk可以直接 用7z解壓 7z x flag.…

Mysql如何高效ALTER TABL

ALTER TABLE 缺點 MySQL 的ALTER TABLE 操作的性能對大表來說是個大問題。 MySQL MySQL 執行大部分修改表結構操作的方法是用新結構的 創建一個,空表從舊表中查出所有數據插入,新表然后刪除舊。表這樣操作可能需要花費很長,時間 如內果存不…

Flutter TabBar與TabBarView聯動及獲取當前點擊欄目索引

TabBar還有TabBarView都是谷歌flutter官方組件庫——Material組件庫提供的組件,其中TabBar用于導航切換,TabBarView則是配合其切換顯示的對應的視圖,官網參考地址:TabBarView class - material library - Dart API。 實現一體聯動…

輕松搭建RAG:澳鵬RAG開發工具

我們很高興地宣布推出RAG開發工具,這是澳鵬大模型智能開發平臺的一項新功能。此功能可幫助團隊輕松創建高質量的檢索增強生成 (RAG) 模型。 什么是 RAG? 檢索增強生成 (RAG) 通過利用大量外部數據源(例如企業的知識庫)顯著增強了…

文獻閱讀(1)——深度強化學習求解車輛路徑問題的研究綜述

doi: 10.3778/j.issn.1002-8331.2210-0153 深度強化學習求解車輛路徑問題的研究綜述 (ceaj.org) 組合最優化問題( combinatorial optimization problem, COP ) 日常生活中常見的 COP 問題有旅行商問題(traveling sale…

數字化轉型領航者:佑美科技塑造智能健康新生態

在全球數字化轉型的浪潮中,佑美專注于智能健康解決方案的創新,正以其卓越的技術實力和前瞻性的戰略眼光,引領著智能穿戴設備和健身器械行業的未來趨勢。佑美科技不僅深耕數字化轉型,更在多個領域獲得了國家級和省級的權威認可,彰顯了其在智能健康領域的影響力。 智能穿戴設備正…

[數據結構] 基于選擇的排序 選擇排序堆排序

標題:[數據結構] 基于選擇的排序 選擇排序&&堆排序 水墨不寫bug (圖片來源于網絡) 目錄 (一)選擇排序 實現:(默認從小到大排序) 優化后實現方法: (二)堆排序…

【Java】垃圾回收學習筆記(二):分代假說與垃圾回收算法

文章目錄 0. 分代收集理論分代假說分代GC定義 1. 垃圾回收算法1.1 標記清除(Mark-Sweep)算法優點缺點 1.2 標記復制算法優點缺點為什么是8:1:1? 1.3 標記整理算法優點缺點 2. 是否移動?Reference 0. 分代收集理論 分代假說 現在…

Navicat和MySQL的安裝

1、下載 Navicat Navicat 官網:www.navicat.com.cn/ 在產品中可以看到很多的產品,點擊免費試用 Navicat Premium 即可,是一套多連數據庫開發工具,其他的只能連接單一類型數據庫 點擊試用 選擇系統直接下載 二、安裝 Navicat 安…

代碼江湖:Python 中的進程與線程

大家好,我是闊升。今天,咱們來聊聊 Python 中的兩個"老熟人"——進程和線程。這兩個概念可以說是 Python 多任務編程中的"雙子星",既相似又不同,讓不少小伙伴們頭疼不已。不過別擔心,今天我們就來…

element el-table實現表格動態增加/刪除/編輯表格行,帶校驗規則

本篇文章記錄el-table增加一行可編輯的數據列,進行增刪改。 1.增加空白行 直接在頁面mounted時對form里面的table列表增加一行數據,直接使用push() 方法增加一列數據這個時候也可以設置一些默認值。比如案例里面的 產品件數 。 mounted() {this.$nextTi…

latex 使用 thanks 首頁空白 問題

寫IEEE journal的時候遇到的問題……用latex寫了\thanks,編譯的論文第一頁是空的,這是因為\thanks要在\author內部,然后再用\maketitle,即\author{… \thanks{}}。這樣的話詳細信息就會出現在論文首頁的左下角 另外,\…

linux創建定時任務

crontab方式 先查看是否有cron systemctl status crond 沒有的話就安裝 yum install cronie 打開你的crontab文件進行編輯。使用以下命令打開當前用戶的crontab文件: crontab -e * * * * * /export/test.sh >> /export/test.log 2>&1/export/test.s…

差分算法中的F 和CR參數

自查使用。。F 類似梯度的大小 兩者都用于種群中新個體的生成

leetcode--從中序與后序遍歷序列構造二叉樹

leeocode地址:從中序與后序遍歷序列構造二叉樹 給定兩個整數數組 inorder 和 postorder ,其中 inorder 是二叉樹的中序遍歷, postorder 是同一棵樹的后序遍歷,請你構造并返回這顆 二叉樹 。 示例 1: 輸入:inorder …

Unity插件 Unitask學習日志

Unity插件 Unitask學習日志 下載地址 https://github.com/Cysharp/UniTask點擊這里可以查閱中文文檔 在Unity 2020,2021 中使用UPM下載會找不到,可以使用2022版本的unity可以在upm中找到。 安裝方式: 下載zip之后解壓, 復制Plugins 到Uni…

uniapp小程序使用webview 嵌套 vue 項目

uniapp小程序使用webview 嵌套 vue 項目 小程序中發送 <web-view :src"urlSrc" message"handleMessage"></web-view>export default {data() {return {urlSrc: "",};},onLoad(options) {// 我需要的參數比較多 所以比較臃腫// 獲取…

01. 數組篇(進行中......)

一. 前綴和技巧 &#xff08;1&#xff09;前綴和 前綴和技巧適用于快速、頻繁地計算一個索引區間內的元素之和。 class NumArray { public:vector<int> preSum; //前綴和數組NumArray(vector<int>& nums) {//preSum[0] 0&#xff0c;便于計算累加和preSum…

Qt圖形編輯類使用總結—正在編輯中

Qt的圖形編輯通常會涉及以下三個類:QGraphicsView類、QGraphicsScene類及QGraphicsItem類。 QGraphicsView 是構建復雜圖形用戶界面的強大工具,尤其適用于那些需要動態更新、可交互的2D圖形化應用程序,如圖表繪制、流程圖編輯器、游戲地圖顯示等等。通過結合使用 QGraphics…

Spring中的工廠模式詳解及應用示例

1. Spring中的BeanFactory BeanFactory是一個接口&#xff0c;表示它是一個工廠&#xff0c;負責生產和管理bean。在Spring中&#xff0c;BeanFactory是IOC容器的核心接口&#xff0c;定義了管理Bean的通用方法&#xff0c;如 getBean 和 containsBean。 BeanFactory與IOC容器…