【代碼隨想錄算法訓練營——Day3】鏈表——203.移除鏈表元素、707.設計鏈表、206.反轉鏈表

LeetCode題目鏈接
https://leetcode.cn/problems/remove-linked-list-elements/
https://leetcode.cn/problems/design-linked-list/
https://leetcode.cn/problems/reverse-linked-list/

題解
203.移除鏈表元素
重要的是創立頭結點,這點在寫題前已經經受過提示。
注意移除代碼中pre結點創建后,在循環中會跟著head往下走,因此要再創建一個cur結點,并令其初值等于pre,而不是直接令其next等于head,因為在遍歷過程中移動了next指針,頭結點被刪除后可能在cur的next里沒被改變,因此要直接令其值等于pre,來改變其next。
其他的創建鏈表代碼有借鑒AI的(實在是AI有提示,沒辦法)。

707.設計鏈表
借助AI的幫助下寫了幾行(不是很多),主要是在按下標添加結點時,index長度等于鏈表長度時調用了addAtTail(val),這點比較要注意,其他的只是模擬。

206.反轉鏈表
在最后return環節那里,是AI給我提示的(沒辦法,AI太快了),腦中模擬一下就知道是pre返回,這回完全沒看題解,都是憑之前的印象做出的,第一遍刷題真的有用!

代碼

//203.移除鏈表元素
#include <iostream>
#include <vector>
using namespace std;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* removeElements(ListNode* head, int val) {if(head == NULL) return NULL;ListNode* pre = new ListNode;pre->next = head;ListNode* cur = pre;while (head != NULL) {if (head->val == val) {pre->next = head->next;head = head->next;}else {pre = head;head = head->next;}}return cur->next;}
};ListNode* createList(vector<int> nums) {if (nums.size() == 0) return NULL;ListNode *pre = new ListNode;pre->next = NULL;ListNode* cur = pre;for (int i = 0;i < nums.size();i++) {cur->next = new ListNode(nums[i]);cur = cur->next;}cur->next = NULL;return pre->next;
}int main() {Solution s;vector<int> nums = {  };ListNode* head = createList(nums);int val = 1;ListNode* node = head;while (node != NULL) {printf("%d ", node->val);node = node->next;}printf("\n");ListNode* result = s.removeElements(head, val);node = result;while (node != NULL) {printf("%d ", node->val);node = node->next;}return 0;
}
//707.設計鏈表
#include <iostream>
using namespace std;class MyLinkedList {
public:struct ListNode {int val;ListNode* next;ListNode() : val(0), next(nullptr) {}ListNode(int x) : val(x), next(nullptr) {}};;MyLinkedList() {preHead = new ListNode();}int getListLen() {ListNode* head = preHead->next;int len = -1;while (head != NULL) {len++;head = head->next;}return len;}int get(int index) {int len = getListLen();if (index < 0 || index > len) return -1;int num = -1;ListNode* head = preHead->next;while (head != NULL) {num++;if (num == index) {return head->val;}head = head->next;}return -1;}void addAtHead(int val) {ListNode* node = new ListNode(val);node->next = preHead->next;preHead->next = node;}void addAtTail(int val) {ListNode* pre = preHead;ListNode* head = preHead->next;while (head != NULL) {pre = head;head = head->next;}ListNode* node = new ListNode(val);pre->next = node;}void addAtIndex(int index, int val) {int len = getListLen() + 1;if (index > len) return;if (index == len) {addAtTail(val); //妙啊return;}ListNode* pre = preHead;ListNode* head = preHead->next;int num = -1;while (num < index - 1) {num++;pre = head;head = head->next;}ListNode* node = new ListNode(val);node->next = pre->next;pre->next = node;}void deleteAtIndex(int index) {int len = getListLen();if (index < 0 || index > len) return;ListNode* pre = preHead;ListNode* head = preHead->next;int num = 0;while (num < index) {pre = head;head = head->next;num++;}pre->next = head->next;delete head;}
private:ListNode* preHead;
};int main() {MyLinkedList myLinkedList;myLinkedList.addAtHead(1);myLinkedList.addAtTail(3);myLinkedList.addAtIndex(1, 2);    // 鏈表變為 1->2->3printf("%d\n", myLinkedList.get(1));              // 返回 2myLinkedList.deleteAtIndex(1);    // 現在,鏈表變為 1->3printf("%d\n", myLinkedList.get(1));              // 返回 3return 0;
}
//206.反轉鏈表
#include <iostream>
#include <vector>
using namespace std;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* reverseList(ListNode* head) {if (head == NULL) return NULL;ListNode* pre = NULL;while (head != NULL) {ListNode* tmp = head->next;head->next = pre;pre = head;head = tmp;}return pre;}
};ListNode* createList(vector<int> nums) {if (nums.size() == 0) return NULL;ListNode* pre = new ListNode;pre->next = NULL;ListNode* cur = pre;for (int i = 0;i < nums.size();i++) {cur->next = new ListNode(nums[i]);cur = cur->next;}cur->next = NULL;return pre->next;
}int main() {vector<int> nums = {  };ListNode* head = createList(nums);ListNode* node = head;while (node != NULL) {printf("%d ", node->val);node = node->next;}printf("\n");Solution s;ListNode* result = s.reverseList(head);node = result;while (node != NULL) {printf("%d ", node->val);node = node->next;}return 0;
}

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

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

相關文章

CI/CD流水線驅動自動化流程深度解析:選型、競品、成本與資源消耗

目錄 一、CI/CD是什么&#xff1f;核心定位與價值 二、選型與競品分析 (GitLab CI vs. Jenkins vs. GitHub Actions vs. GitLab CI) 三、部署成本分析 四、服務器資源消耗分析 五、給您的最終建議 一、CI/CD是什么&#xff1f;核心定位與價值 CI/CD&#xff08;持續集成/…

工廠辦公環境如何實現一臺服務器多人共享辦公

在現代化工廠的辦公環境中&#xff0c;如何通過一臺服務器實現多人共享辦公是一個既實用又高效的需求。這種方案不僅能降低硬件成本&#xff0c;還能簡化IT管理&#xff0c;提高數據安全性。在工廠辦公環境中&#xff0c;通過云飛云共享云桌面實現一臺服務器多人共享辦公&#…

系統性學習數據結構-第三講-棧和隊列

系統性學習數據結構-第三講-棧和隊列1. 棧1.1 棧和隊列1.2 棧的實現2. 隊列2.1 概念與結構2.2 隊列的實現3. 棧和隊列算法題3.1 [有效的括號](https://leetcode.cn/problems/valid-parentheses/description/)3.2 [用隊列實現棧](https://leetcode.cn/problems/implement-stack-…

硬件(三) 通信方式、串口通信

一、通信類型&#xff08;一&#xff09;并行通信多個比特通過并行線同時傳輸&#xff0c;傳輸速率快&#xff0c;但會大量占用芯片資源&#xff0c;在對資源敏感的場景下不太適用。&#xff08;二&#xff09;串行通信把數據拆成單個比特&#xff0c;按順序在一根總線上發送。…

vsan default storage policy 具體是什么策略?

vSAN Default Storage Policy&#xff08;vSAN 默認存儲策略&#xff09;是 VMware vSAN 部署后自動創建的基礎存儲策略&#xff0c;其核心目標是在“通用性”和“可靠性”之間取得平衡&#xff0c;為大多數虛擬機提供默認的數據保護和存儲服務&#xff0c;無需管理員手動創建策…

雨后陽光為何更強烈?

1. 降雨后的輻射是否會增強一般來說&#xff0c;降雨時天空多云&#xff0c;云層對太陽輻射有強烈削弱作用&#xff0c;所以降雨時的短波輻射顯著下降。但雨后&#xff0c;空氣濕度大、顆粒物被沖刷、天空轉晴時&#xff0c;大氣透明度會提高&#xff0c;短波輻射相較于降雨前往…

美團發布 | LongCat-Flash最全解讀,硬剛GPT-4.1、Kimi!

一、導讀 本報告解析了美團LongCat團隊推出的LongCat-Flash模型&#xff0c;一個擁有5600億參數的混合專家模型&#xff08;Mixture-of-Experts, MoE&#xff09;。面對大規模語言模型在計算資源和效率上的挑戰&#xff0c;LongCat-Flash旨在實現計算效率與高級智能體&#xf…

Ubuntu 18.04 上升級 gcc 到 9.4

18.04 默認的源中可能沒有 GCC-9.3 或更新版本&#xff0c;在終端運行以下命令來添加 PPA&#xff1a; sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update2.安裝 GCC 和 G sudo apt install gcc-9 g-93.更新替代版本 如果系統中安裝了多個 GCC 版本&#x…

.NET GcPDF V8.2 新版本:人工智能 PDF 處理

一、GcPDF 產品簡介 GcPDF&#xff08;GrapeCity Documents for PDF&#xff09;是葡萄城&#xff08;GrapeCity&#xff09;推出的一款功能強大的 .NET PDF 開發組件&#xff0c;旨在為開發人員提供高效、靈活的 PDF 文檔處理解決方案。無論是創建全新 PDF 文檔、編輯現有 PD…

解鎖桐果云零代碼數據平臺能力矩陣——賦能零售行業數字化轉型新動能

在零售行業從“規模擴張”轉向“精細運營”的當下&#xff0c;數據已成為優化庫存、精準營銷、防控風險的核心抓手。但多數零售企業仍面臨“數據雜亂難治理、分析建模門檻高、場景適配性不足”等難題&#xff0c;導致大量訂單、商品、交易數據沉睡&#xff0c;難以轉化為經營決…

rabbitmq 入門知識點

RabbitMQ 是一個 消息隊列中間件&#xff08;Message Broker&#xff09;&#xff0c;實現了 AMQP 協議&#xff0c;常用于服務之間解耦、異步處理、流量削峰等場景。 我幫你分成兩個部分來講&#xff1a;核心原理 常見用法。&#x1f9e9; 一、核心原理 RabbitMQ 的核心是 生…

點控云智能客服:以AI重塑服務體驗,登頂行業第一的革新之路

在數字化浪潮席卷全球的今天&#xff0c;客戶服務已成為企業核心競爭力之一。智能客服作為連接企業與客戶的重要橋梁&#xff0c;其效能與體驗直接關系到企業的品牌形象與市場口碑。近日&#xff0c;權威機構發布的《中國智能客服市場競爭力報告》顯示&#xff0c;點控云智能客…

9.5 IO-線程day5

信號量打印ABC#include <stdio.h> #include <string.h> #include <stdlib.h> #include <25061head.h> sem_t sem[1]; void *callback(void *arg) {while(1){sem_wait(&sem[0]);printf("A\n");sleep(1);sem_post(&sem[1]);}pthread_e…

老師如何高效收集學生學籍信息,完成收集工作?

開學的時光總是忙碌而充實&#xff0c;除了要熱情地迎接新生、用心地備課&#xff0c;還有一件讓人頭疼不已的事情——學生學籍信息的收集。上學期開學&#xff0c;我承擔起了收集班級新生信息的重任&#xff0c;滿心以為提前準備好的紙質表格&#xff0c;在新生報到那天發給家…

JAVA層的權限與SELinux的關系

Java 層權限是應用程序級別的“門禁卡”&#xff0c;而 SELinux 是系統級別的“防火墻規則和強制訪問控制”。即使你擁有進入大樓的“門禁卡”&#xff08;Java 權限&#xff09;&#xff0c;如果“防火墻規則”&#xff08;SELinux 策略&#xff09;不允許你的進程與目標服務或…

Screen 三步上手

好的&#xff0c;這是給同事的簡潔版說明&#xff1a;Screen 三步上手 開新窗口&#xff1a;干活前先開個帶名字的窗口&#xff0c;不怕斷連。 screen -S 任務名看所有窗口&#xff1a;隨時查看都有哪些任務在后臺跑。 screen -ls重回窗口&#xff1a;斷連后重新登錄&#xff0…

flink 偽代碼

import java.util.*; import java.util.concurrent.*;// 核心接口定義 interface StreamOperator {void open();void processElement(Object element);void close(); }interface SourceFunction extends StreamOperator {void run(SourceContext ctx); }interface SinkFunction…

一招快速識別你的電腦是機械硬盤還是固態硬盤

你是否經常覺得電腦開機慢、軟件打開卡頓&#xff1f;其中一個關鍵原因&#xff0c;可能就在于你使用的是機械硬盤&#xff08;HDD&#xff09;還是固態硬盤&#xff08;SSD&#xff09;。固態硬盤讀寫速度快&#xff0c;能顯著提升系統響應速度&#xff1b;而機械硬盤雖然容量…

52核心52線程,Intel下一代CPU憋了個大的

被逼急了的 Intel&#xff0c;可能正在憋大招&#xff01;如大伙兒所見&#xff0c;Intel 這兩年日子已經不能用「慘」來形容。其過去引以為傲的 PC 處理器&#xff0c;特別是高性能桌面處理器領域&#xff0c;如今算是徹底被 AMD 打懵了。無他&#xff0c;己方產品是連年擺爛&…

【LeetCode 熱題 100】1. 兩數之和——(解法二)哈希表

Problem: 1. 兩數之和 文章目錄整體思路完整代碼時空復雜度時間復雜度&#xff1a;O(N)空間復雜度&#xff1a;O(N)整體思路 這段代碼旨在高效地解決 “兩數之和” 問題。與 O(N^2) 的暴力枚舉法相比&#xff0c;此版本采用了一種經典的 “空間換時間” 策略&#xff0c;利用 …