鏈表算法中常用操作和技巧

1.常用技巧

1.1.畫圖

?1.2.添加虛擬頭節點

?1.3.大膽引入中間變量

1.4.快慢雙指針

1.4.1判斷鏈表是否有環

?1.4.2找鏈表中環的入口

?2.常用操作

2.1. 創建一個新節點

2.2.尾插

2.3.頭插?


1.常用技巧

1.1.畫圖

畫圖可以讓一些抽象的文字語言更加形象生動

畫圖!!!->直觀+形象+便于我們理解

例如:

現在有一個結構體

struct s
{struct s*pprev;struct s*pnext;
}

?他們的的關系如下:

prev->pnext->pnext=cur;
cur->pprev->prev=prev;
cur->pnext=prev;
prev->pprev=cur;

是不是感覺無從下手,但是我們只要轉化為圖形就能很好的理解:?

?1.2.添加虛擬頭節點

?在鏈表算法題中很多時候都會給我們傳來的頭節點為空情況,如果我們沒有判斷直接對空指針進行解引用,程序可能會直接崩潰:?

如果我們能引入一個頭節點,則可以避免直接對空指針解引用情況

這個頭節點我們也會稱作‘哨兵位’:?

?1.3.大膽引入中間變量

?如果不引入中間變量

prev->pnext->pprev=cur;
cur->pnext=prev->pnext;
prev->pnext=cur;
cur->pprev=prev;

?引入中間變量next,代碼更加干凈整潔

next=prev->pnext;
next->pprev=cur;
cur->pnext=next;
prev->pnext=cur;
cur->pprev=prev;

1.4.快慢雙指針

1.4.1判斷鏈表是否有環

  • 快指針(fast)一次走兩步,慢指針(slow)一次走兩步
  • 對有環的鏈表來說,慢指針相當于快指針不動,快指針相對慢指針一次一步
  • 對無環的鏈表來說,快指針會提前走出鏈表,讓循環結束
  • 循環條件(fast==slow)有環,(fast->next==nullptr||fast->next->next==nullptr)無環

?相遇:

?1.4.2找鏈表中環的入口

  • 假設鏈表共有a+b個元素,從head(頭節點)到圓環入口有a個元素,圓環有b個元素
  • 在有環基礎上,兩者相遇,快指針和慢指針分別走了f,s。f=2s(因為快指針是慢指針速度的兩倍)
  • f=s+nb(fast比slow多走了n個圓環),所以f=2nb,s=nb
    • 固定此時相遇位置,slow從頭開始再走一遍,slow到fast的位置就是圓環b的長度
    • 不固定此時相遇位置,slow從頭出發,fast從相遇位置出發,兩者都每次走一步,兩者再次相遇的位置即為圓環入口的位置?

2.常用操作

2.1. 創建一個新節點

例如:創建一個head的指針

s*head=new s();

2.2.尾插

tail->next=cur;
cur=tail;

2.3.頭插?

cur->next=head->next;
head->next=cur;

常用于反轉鏈表

class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode* phead=new ListNode();if(head==nullptr) return nullptr;phead->next=head;ListNode*cur=head->next;head->next=nullptr;while(cur!=nullptr){ListNode*temp=cur->next;cur->next=phead->next;phead->next=cur;cur=temp;}return phead->next;}
};

?

?

?

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

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

相關文章

【9】數據結構的串篇章

目錄標題 串的定義順序串的實現初始化賦值打印串求串的長度復制串判斷兩個串長度是否相等連接兩個串比較兩個串內容是否相等插入操作刪除操作調試與代碼合集 串的模式匹配算法樸素的模式匹配算法KMP算法實現模式匹配 串的定義 定義:由0個或多個字符組成的有限序列&…

GMSL Strapping Pins CFG0/CFG1 應用

GMSL device 使用起來還是比較簡單 ADI 已經充分考慮了用戶的需求,盡可能的降低的芯片的使用和配置復雜度 一對加串器和解串器,只要工作模式匹配得當,Link Locked,便能夠正常工作 如果遇到 Link 無法建立(Locked&…

`uia.WindowControl` 是什么:獲取窗口文字是基于系統的 UI 自動化接口,而非 OCR 方式

uia.WindowControl 是什么:獲取窗口文字是基于系統的 UI 自動化接口,而非 OCR 方式 uia.WindowControl 通常是基于 Windows 系統的 UI 自動化框架(如 pywinauto 中的 uia 模塊)里用于表示窗口控件的類。在 Windows 操作系統中,每個應用程序的窗口都可以看作是一個控件,ui…

Easysearch VS Opensearch 數據寫入與存儲性能對比

本文記錄 Easysearch 和 Opensearch 數據寫入和數據存儲方面的性能對比。 準備 壓測工具:INFINI Loadgen 對比版本: Easysearch 1.11.1(lucene 8.11.4)Opensearch 2.19.1(lucene 9.12.1) 節點 JVM 配置…

力扣題解:142. 環形鏈表 II

在鏈表學習中,我們已經了解了單鏈表和雙鏈表,兩者的最后一個結點都會指向NULL;今天我們介紹的循環列表則不同,其末尾結點指向的這是鏈表中的一個結點。 循環鏈表是一種特殊類型的鏈表,其尾節點的指針指向頭節點&#…

區間 dp 系列 題解

1.洛谷 P4342 IOI1998 Polygon 我的博客 2.洛谷 P4290 HAOI2008 玩具取名 題意 某人有一套玩具,并想法給玩具命名。首先他選擇 W, I, N, G 四個字母中的任意一個字母作為玩具的基本名字。然后他會根據自己的喜好,將名字中任意一個字母用 W, I, N, G …

天基光學圖像仿真原理簡介

一、原理簡介 天基光學圖像仿真通過數學模型和算法模擬空間目標在光學系統中的成像過程,核心原理可歸納為以下四部分: 1. 目標與背景建模? 目標運動建模?:利用軌道動力學模型(如SGP4)解析空間目標軌跡,…

Jetpack Compose 狀態保存機制全面解析:讓UI狀態持久化

在Android開發中,Jetpack Compose 的狀態管理是一個核心話題,而狀態保存則是確保良好用戶體驗的關鍵。本文將深入探討Compose中各種狀態保存技術,幫助你在配置變更和進程重建時保持UI狀態。 一、基礎保存:rememberSaveable reme…

【Json-Rpc #1】項目背景及環境搭建

📃個人主頁:island1314 🔥個人博客:island ?? 歡迎關注:👍點贊 👂🏽留言 😍收藏 💞 💞 💞 生活總是不會一帆風順,前進…

WPF輪播圖動畫交互 動畫縮放展示圖片

WPF輪播圖動畫交互 動畫縮放展示圖片 效果如下圖&#xff1a; XAML代碼&#xff1a; <Window x:Class"Caroursel.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/20…

為什么 npm list -g 沒顯示 node_modules??

揭秘&#xff1a;為什么 npm list -g 沒顯示 node_modules&#xff1f;&#x1f575;??♂?? 嗨&#xff0c;各位代碼探險家&#xff01;&#x1f44b; 今天我們要破解一個 npm 小謎團&#xff1a;運行 npm list -g --depth0 時&#xff0c;為什么輸出的路徑里看不到 node_…

都江堰與鄭國渠

目錄標題 一、歷史背景&#xff1a;地緣博弈下的水利突圍都江堰&#xff1a;化水患為天府的千年大計鄭國渠&#xff1a;間諜引發的戰略反轉 二、工程智慧&#xff1a;超越時代的科技奇跡都江堰&#xff1a;生態治水的典范鄭國渠&#xff1a;泥沙資源化的創舉 三、后世影響&…

鏈路聚合+vrrp

1.鏈路聚合 作用注意事項將多個物理接口&#xff08;線路&#xff09;邏輯上綁定在一起形成一條邏輯鏈路&#xff0c;起到疊加帶寬的作用1.聚合接口必須轉發速率一致。2.聚合設備兩端必須一致 配置命令 方法一 [Huawei]interface Eth-Trunk 0----先創建聚合接口&#xff0c;…

【STM32單片機】#7 定時器輸入捕獲

主要參考學習資料&#xff1a; B站江協科技 STM32入門教程-2023版 細致講解 中文字幕 開發資料下載鏈接&#xff1a;https://pan.baidu.com/s/1h_UjuQKDX9IpP-U1Effbsw?pwddspb 單片機套裝&#xff1a;STM32F103C8T6開發板單片機C6T6核心板 實驗板最小系統板套件科協 實驗&…

【android bluetooth 框架分析 01】【關鍵線程 3】【bt_jni_thread 線程介紹】

1. bt_jni_thread 職責介紹 bt_jni_thread 這個線程的作用是專門負責處理藍牙 JNI 層的消息循環&#xff0c;也可以說是 C 層和 Java 層交互的橋梁線程。 1.1 什么是 JNI 層&#xff1f;為什么需要這個線程&#xff1f; JNI&#xff08;Java Native Interface&#xff09;是 …

基于視覺語言模型的機器人實時探索系統!ClipRover:移動機器人零樣本視覺語言探索和目標發現

作者&#xff1a;Yuxuan Zhang 1 ^{1} 1, Adnan Abdullah 2 ^{2} 2, Sanjeev J. Koppal 3 ^{3} 3, and Md Jahidul Islam 4 ^{4} 4單位&#xff1a; 2 , 4 ^{2,4} 2,4佛羅里達大學電氣與計算機工程系RoboPI實驗室&#xff0c; 1 , 3 ^{1,3} 1,3佛羅里達大學電氣與計算機工程系F…

SpringBoot和微服務學習記錄Day2

微服務 微服務將單體應用分割成更小的的獨立服務&#xff0c;部署在不同的服務器上。服務間的關聯通過暴露的api接口來實現 優點&#xff1a;高內聚低耦合&#xff0c;一個模塊有問題不影響整個應用&#xff0c;增加可靠性&#xff0c;更新技術方便 缺點&#xff1a;增加運維…

網站集群批量管理-Ansible劇本與變量

復盤內容&#xff1a;鏈接指北 查看ansible命令文檔 ansible-doc -s systemd一、劇本 何為劇本: playbook 文件,用于長久保存并且實現批量管理,維護,部署的文件. 類似于腳本存放命令和變量 劇本yaml格式,yaml格式的文件:空格,冒號. 劇本未來我們批量管理,運維必會的內容. …

如何在Dify中安裝運行pandas、numpy庫(離線、在線均支持,可提供遠程指導)

pandas和numpy這兩個庫是數據科學和數據分析中經常使用的工具包&#xff0c;原生的Dify無法直接使用這兩個庫&#xff0c;需要手動安裝后才可以使用。本文將介紹如何在Dify中安裝pandas和numpy&#xff0c;并在代碼執行節點中運行使用pandas和numpy。 Dify的代碼執行節點中的py…

Helm核心概念與常見操作介紹

在管理Kubernetes集群里的應用時&#xff0c;Helm能幫上大忙&#xff0c;它把應用的部署、升級和管理變得簡單多了&#xff0c;有如是Kubernetes的 “應用商店”。 Helm的三個重要概念 三大概念最直接的理解&#xff1a;Helm 安裝 charts 到 Kubernetes 集群中&#xff0c;每…