設計一個算法:刪除非空單鏈表L中結點值為x的第一個結點的前驅結點

目錄

單鏈表的存儲結構定義如下

快慢指針法

三指針法版本①

三指針法版本②?


單鏈表的存儲結構定義如下

typedef struct{Elemtype data;struct Node* next;
}LNode,*LinkList;

快慢指針法

void deleteprex(LinkList L, Elemtype e) {if (L == NULL || L->next == NULL || L->next->next == NULL) {return;  // 鏈表為空、只有一個節點或兩個節點,無法刪除前驅節點}LinkList q = L;        // 慢指針,指向當前節點的前驅LinkList p = L->next;  // 快指針,用于查找值為e的節點// 檢查第一個數據節點是否是目標節點(此時沒有前驅節點)if (p->data == e) {return;  // 無法刪除前驅節點,直接返回}// 從第二個數據節點開始遍歷p = p->next;  // p指向第二個數據節點while (p != NULL) {if (p->data == e) {// 找到值為e的節點,刪除其前驅節點(即q的下一個節點)LinkList temp = q->next;q->next = p;free(temp);return;  // 只刪除第一個出現的節點的前驅,處理完后立即返回}// 未找到,指針后移q = q->next;p = p->next;}
}

三指針法版本①

int DelNodeX_L(LinkList &L, ElemType x) {// 初始化指針:prepre 指向頭結點,pre 指向第二個結點,p 待初始化LinkList prepre = L, pre = prepre->next, p;  // 若第二個結點值就是 x,無有效前驅可刪,返回失敗if (pre->data == x)  return 0;  // p 指向第三個結點,開始遍歷找值為 x 的結點p = pre->next;  while (p != NULL && p->data != x) {  // 指針后移:prepre → pre → pprepre = pre;  pre = p;  p = p->next;  }  // 找到值為 x 的結點(p 非空),刪除其前驅(pre)if (p != NULL) {  // prepre 跳過 pre,直接指向 pprepre->next = p;  // 釋放前驅結點內存free(pre);  // 返回刪除成功return 1;  } else {  // 未找到值為 x 的結點,返回失敗return 0;  }  
}

三指針法版本②

void deleteprex(LinkList L, Elemtype e) {if (L == NULL || L->next == NULL || L->next->next == NULL) {return;  // 鏈表為空、只有一個節點或兩個節點,不可能存在前驅節點}LinkList pre = L;        // 前驅節點的前驅(用于刪除操作)LinkList cur = L->next;  // 當前節點,用于查找值為e的節點// 檢查第一個數據節點是否是目標節點(此時沒有前驅節點)if (cur->data == e) {return;  // 無法刪除前驅節點,直接返回}// 從第二個數據節點開始遍歷LinkList next = cur->next;while (next != NULL) {if (next->data == e) {// 找到值為e的節點,刪除其前驅節點(即cur)pre->next = next;free(cur);return;  // 只刪除第一個出現的節點的前驅,處理完后立即返回}// 未找到,指針后移pre = cur;cur = next;next = next->next;}
}

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

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

相關文章

【Qt】:設置新建類模板

完整的頭文件模板 #ifndef %FILENAME%_H #define %FILENAME%_H/*** brief The %CLASSNAME% class* author %USER%* date %DATE%*/ class %CLASSNAME% { public:%CLASSNAME%();~%CLASSNAME%();// 禁止拷貝構造和賦值%CLASSNAME%(const %CLASSNAME%&) delete;%CLASSNAME%&a…

?**?CID字體?**? 和 ?**?Simple字體?**?

在PDF中,字體類型主要分為 ??CID字體?? 和 ??Simple字體?? 兩大類,它們的主要區別在于編碼方式和適用場景。以下是它們的詳細對比: ??1. CID字體(CID-keyed Fonts)?? CID(Character Identifie…

計組_導學

2025.05.31:老湯講408計組學習筆記 導學 第1章計算機系統概述:對計算機系統有全局的認識第2章總線系統:簡單且獨立,不會依賴其他內容,它是被依賴的第3章主存儲器:只有了解主存儲器的內部結構,才能理解在主存中是如何存儲二進制的第4章數據的表示與運算:各種編碼以及計算…

【GPT模型訓練】第二課:張量與秩:從數學本質到深度學習的基礎概念解析

這里寫自定義目錄標題 張量(Tensor)的定義關鍵特點:示例: 張量的秩(Rank)示例:“秩”的拼音常見混淆點 總結 張量(Tensor)的定義 在數學和物理學中,張量是一…

RabbitMQ work模型

Work 模型是 RabbitMQ 最基礎的消息處理模式,核心思想是 ??多個消費者競爭消費同一個隊列中的消息??,適用于任務分發和負載均衡場景。同一個消息只會被一個消費者處理。 當一個消息隊列綁定了多個消費者,每個消息消費的個數都是平攤的&a…

【Linux操作系統】基礎開發工具(yum、vim、gcc/g++)

文章目錄 Linux軟件包管理器 - yumLinux下的三種安裝方式什么是軟件包認識Yum與RPMyum常用指令更新軟件安裝與卸載查找與搜索清理緩存與重建元數據 yum源更新1. 備份現有的 yum 源配置2. 下載新的 repo 文件3. 清理并重建緩存 Linux編輯器 - vim啟動vimVim 的三種主要模式常用操…

73常用控件_QFormLayout的使用

目錄 代碼?例: 使? QFormLayout 創建表單. 除了上述的布局管理器之外, Qt 還提供了 QFormLayout , 屬于是 QGridLayout 的特殊情況, 專 ??于實現兩列表單的布局. 這種表單布局多?于讓??填寫信息的場景. 左側列為提?, 右側列為輸?框 代碼?例: 使? QFormLayout 創…

蘭亭妙微 | 醫療軟件的界面設計能有多專業?

從醫療影像系統到手術機器人控制界面,從便攜式病原體檢測設備到多平臺協同操作系統,蘭亭妙微為眾多醫療設備研發企業,打造了兼具專業性與可用性的交互界面方案。 我們不僅做設計,更深入理解醫療場景的實際需求: 對精…

鴻蒙開發修改版本幾個步驟

鴻蒙開發修改版本幾個步驟 比如:5.0.4(16)版本改為5.0.2(14)版本 一、項目下的build-profile.json5 "products": [{"name": "default","signingConfig": "default&qu…

Flask 基礎與實戰概述

一、Flask 基礎知識 什么是 Flask? Flask 是一個基于 Python 的輕量級 Web 框架(微框架)。 特點:核心代碼簡潔,給予開發者更多選擇空間。 與 Django 對比: Django 創建空項目生成多個文件,Flask 僅需一個文件即可實現簡單應用(如 "Hello, World!")。 Flask …

Linux安全加固:從攻防視角構建系統免疫

Linux安全加固:從攻防視角構建系統免疫 構建堅不可摧的數字堡壘 引言:攻防對抗的新紀元 在日益復雜的網絡威脅環境中,Linux系統安全已從被動防御轉向主動免疫。2023年全球網絡安全報告顯示,高級持續性威脅(APT)攻擊同比增長65%,平均入侵停留時間縮短至48小時。本章將從…

Java嚴格模式withResolverStyle解析日期錯誤及解決方案

在Java中使用DateTimeFormatter并啟用嚴格模式(ResolverStyle.STRICT)時,解析日期字符串"2025-06-01"報錯的根本原因是:模式字符串中的年份格式yyyy被解釋為YearOfEra(紀元年份),而非…

Java中的泛型底層是怎樣的

Java 泛型深入底層原理解析:類型擦除與橋方法的真相 一、Java中的偽泛型 Java 從 JDK 1.5 引入泛型之后,大大提升了代碼的類型安全性與可讀性。但泛型的底層實現并不像 C 的模板機制那樣是“真正的泛型”,Java 的泛型是偽泛型,在…

Spring Boot 從Socket 到Netty網絡編程(上):SOCKET 基本開發(BIO)與改進(NIO)

前言 無論是軟件還是硬件的本質都是要解決IO問題(輸入、輸出),再說回網絡編程本質上都是基于TCP/UP的開發,socket是在此基礎上做的擴展與封裝,而Netty又是對socket做的封裝。本文旨在通過相關案例對socket進行探討。 一…

【大模型LLM學習】function call/agent學習記錄

【大模型LLM學習】function call/agent學習記錄 0 前言1 langchain實現function call2 調用本地模型3 微調本地模型3.1 few-shot調用Claude生成Q-A對3.2 tools格式3.3 agent微調格式3.4 swift微調 p.s. 0 前言 記錄一下使用langchain做簡單的function call/agent(或者說意圖識別…

【碎碎念】寶可夢 Mesh GO : 基于MESH網絡的口袋妖怪 寶可夢GO游戲自組網系統

目錄 游戲說明《寶可夢 Mesh GO》 —— 局域寶可夢探索Pokmon GO 類游戲核心理念應用場景Mesh 特性 寶可夢玩法融合設計游戲構想要素1. 地圖探索(基于物理空間 廣播范圍)2. 野生寶可夢生成與廣播3. 對戰系統4. 道具與通信5. 延伸玩法 安全性設計 技術選…

Puppeteer測試框架 - Node.js

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】

compose 組件 ---無ui組件

在 Jetpack Compose 中,確實存在不直接參與 UI 渲染的組件,它們主要用于邏輯處理、狀態管理或副作用控制。這些組件雖然沒有視覺界面,但在架構中扮演重要角色。以下是常見的非 UI 組件及其用途: 1. 無 UI 的 Compose 組件分類 (…

圖像超分辨率

圖像超分辨率 用AI當“像素偵探”,從模糊中重建合理高清細節,讓看不見的細節“無中生有”。 舉個生活例子 假設你有一張模糊的老照片,通過超分辨率技術,它能變成清晰的高清照片: 低分辨率圖像超分辨率結果 傳統放…