代碼隨想錄day3鏈表1

new關鍵字

1.new是一個關鍵字,用于開辟空間,開辟的空間在堆上,而一般聲明的變量存放在棧上;

2.new得到的是一段空間的首地址。所以一般需要用指針來存放這段地址

new int(10);//返回new出來這塊內存的地址int *p=new int(10);//用一個指針去接受這個地址cout << p << endl;//返回內存空間地址00995B08cout << *p << endl;//返回初始值10delete p;

3.開辟的內存空間需要記得delete掉,否則會造成內存泄漏!

delete p的時候:首先調用這個對象的析構函數,然后釋放這個對象的空間。

靜態鏈表

題目鏈接

#include <iostream>
#include <cstdio>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include<list>
#include <set>
#include <ctime>
#include<unordered_map>
#include <bitset>
#include<random>
#include<regex>
#include <chrono>using namespace std;typedef long long ll;
#define pr pair<double,int>
#define tp tuple<int,int,int>
const int N = 2e6 + 7;
const int mod = 998244353;
ll a[N],s[N];
ll n, m, k;
ll e[N];
ll ne[N];
ll head,idx;
void init()
{head = 0;idx = 1;
}
void head_add(ll x)
{e[idx]=x,ne[idx]=head,head=idx++;
}
void add(ll k,ll x)
{e[idx]=x,ne[idx]=ne[k],ne[k]=idx++;
}
void remove(ll k)
{ne[k]=ne[ne[k]];
}
void solve()
{ll m;cin>>m;while(m--){char c;cin>>c;if(c=='H'){ll x;cin>>x;head_add(x);}else if(c=='D'){ll k;cin>>k;if(k==0) head=ne[head];else remove(k);}else if(c=='I'){ll k,x;cin>>k>>x;add(k,x);}}for(ll i=1;i<=idx;i++)cout<<e[i]<<" ";
}int main()
{cin.tie(0); cout.tie(0);ios::sync_with_stdio(false);//提高cin、cout的輸入輸出效率solve();
}

移除鏈表元素

題目鏈接
文章講解
視頻講解

AC

設置一個虛擬頭結點,這樣原鏈表的所有節點就都可以按照統一的方式進行移除了。

/*** 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* removeElements(ListNode* head, int val) {ListNode* fake=new ListNode(0);fake->next=head;ListNode* p = fake;while (p->next != NULL) {if(p->next->val==val){ListNode* tmp=p->next;p->next=p->next->next;delete tmp;}elsep=p->next;}return fake->next;}
};

靜態鏈表做法

#include <iostream>
#include <cstdio>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include<list>
#include <set>
#include <ctime>
#include<unordered_map>
#include <bitset>
#include<random>
#include<regex>
#include <chrono>using namespace std;typedef long long ll;
#define pr pair<double,int>
#define tp tuple<int,int,int>
const int N = 2e6 + 7;
const int mod = 998244353;
ll a[N],s[N];
ll n, m, k;
ll e[N];
ll ne[N];
ll head,idx;
void init()
{head = -1;idx = 0;
}
void head_add(ll x)
{e[idx]=x,ne[idx]=head,head=idx++;
}
void add(ll k,ll x)
{e[idx]=x,ne[idx]=ne[k],ne[k]=idx++;
}
void remove(ll k)
{if (head == -1) return;// 如果刪除的是頭節點if (e[head] == k){head = ne[head];return;}// 從 head 開始找前驅節點ll prev = head;while (ne[prev] != -1 && e[ne[prev]] != k){prev = ne[prev];}// 找到了要刪除的節點的前驅if (ne[prev] != -1){ne[prev] = ne[ne[prev]];}
}void solve()
{init();ll m,val;cin>>m>>val;for(int i=0;i<m;i++){ll x;cin>>x;if(i==0) head_add(x);else add(i-1,x);}for(ll i=head;i!=-1;i=ne[i]){if(e[i]==val){remove(val);}}for(ll i=head;i!=-1;i=ne[i]){cout<<e[i]<<" ";}
}int main()
{cin.tie(0); cout.tie(0);ios::sync_with_stdio(false);//提高cin、cout的輸入輸出效率solve();
}

707. 設計鏈表

題目鏈接
文章講解
視頻鏈接

AC

class MyLinkedList {
public:// 定義鏈表節點結構體struct LinkedNode {int val;LinkedNode* next;LinkedNode(int val):val(val), next(nullptr){}};// 初始化鏈表MyLinkedList() {_dummyHead = new LinkedNode(0); // 這里定義的頭結點 是一個虛擬頭結點,而不是真正的鏈表頭結點_size = 0;}// 獲取到第index個節點數值,如果index是非法數值直接返回-1, 注意index是從0開始的,第0個節點就是頭結點int get(int index) {if (index > (_size - 1) || index < 0) {return -1;}LinkedNode* cur = _dummyHead->next;while(index--){ // 如果--index 就會陷入死循環cur = cur->next;}return cur->val;}// 在鏈表最前面插入一個節點,插入完成后,新插入的節點為鏈表的新的頭結點void addAtHead(int val) {LinkedNode* newNode = new LinkedNode(val);newNode->next = _dummyHead->next;_dummyHead->next = newNode;_size++;}// 在鏈表最后面添加一個節點void addAtTail(int val) {LinkedNode* newNode = new LinkedNode(val);LinkedNode* cur = _dummyHead;while(cur->next != nullptr){cur = cur->next;}cur->next = newNode;_size++;}// 在第index個節點之前插入一個新節點,例如index為0,那么新插入的節點為鏈表的新頭節點。// 如果index 等于鏈表的長度,則說明是新插入的節點為鏈表的尾結點// 如果index大于鏈表的長度,則返回空// 如果index小于0,則在頭部插入節點void addAtIndex(int index, int val) {if(index > _size) return;if(index < 0) index = 0;        LinkedNode* newNode = new LinkedNode(val);LinkedNode* cur = _dummyHead;while(index--) {cur = cur->next;}newNode->next = cur->next;cur->next = newNode;_size++;}// 刪除第index個節點,如果index 大于等于鏈表的長度,直接return,注意index是從0開始的void deleteAtIndex(int index) {if (index >= _size || index < 0) {return;}LinkedNode* cur = _dummyHead;while(index--) {cur = cur ->next;}LinkedNode* tmp = cur->next;cur->next = cur->next->next;delete tmp;//delete命令指示釋放了tmp指針原本所指的那部分內存,//被delete后的指針tmp的值(地址)并非就是NULL,而是隨機值。也就是被delete后,//如果不再加上一句tmp=nullptr,tmp會成為亂指的野指針//如果之后的程序不小心使用了tmp,會指向難以預想的內存空間tmp=nullptr;_size--;}// 打印鏈表void printLinkedList() {LinkedNode* cur = _dummyHead;while (cur->next != nullptr) {cout << cur->next->val << " ";cur = cur->next;}cout << endl;}
private:int _size;LinkedNode* _dummyHead;};

206. 反轉鏈表

題目鏈接
文章講解
視頻講解

AC

/*** 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* reverseList(ListNode* head) {ListNode* temp; // 保存cur的下一個節點ListNode* cur = head;ListNode* pre = NULL;while(cur) {temp = cur->next;  // 保存一下 cur的下一個節點,因為接下來要改變cur->nextcur->next = pre; // 翻轉操作// 更新pre 和 cur指針pre = cur;cur = temp;}return pre;}
};

靜態鏈表

#include <iostream>
#include <cstdio>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include<list>
#include <set>
#include <ctime>
#include<unordered_map>
#include <bitset>
#include<random>
#include<regex>
#include <chrono>using namespace std;typedef long long ll;
#define pr pair<double,int>
#define tp tuple<int,int,int>
const int N = 2e6 + 7;
const int mod = 998244353;
ll a[N],s[N];
ll n, m, k;
ll e[N];
ll ne[N];
ll head,idx;
void init()
{head = -1;idx = 0;
}
void head_add(ll x)
{e[idx]=x,ne[idx]=head,head=idx++;
}
void add(ll k,ll x)
{e[idx]=x,ne[idx]=ne[k],ne[k]=idx++;
}
void reverse()
{ll pre=-1;ll p=head;while(p!=-1){ll tmp=ne[p];ne[p]=pre;pre=p;p=tmp;}head=pre;
}
void solve()
{init();ll m;cin>>m;for(int i=0;i<m;i++){ll x;cin>>x;if(i==0) head_add(x);else add(i-1,x);}reverse();for(ll i=head;i!=-1;i=ne[i]){cout<<e[i]<<" ";}
}int main()
{cin.tie(0); cout.tie(0);ios::sync_with_stdio(false);//提高cin、cout的輸入輸出效率solve();
}

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

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

相關文章

taro小程序如何實現新用戶引導功能?

一、需求背景 1、需要實現小程序新功能引導 2、不使用第三方庫&#xff08;第三方組件試了幾個&#xff0c;都是各種兼容性問題&#xff0c;放棄&#xff09; 二、實現步驟 1、寫一個公共的guide組件&#xff0c;代碼如下 components/Guide/index.tsx文件 import React, { …

鍵盤動作可視化技術淺析:如何做到低延遲顯示

在做屏幕錄制或者操作演示的時候&#xff0c;你是否遇到過這樣的問題&#xff1a;觀眾看不清你按了哪個鍵、點了哪里&#xff1f;這是能完美解決這個問題的小工具Keyviz。它可以把你的鍵盤輸入和鼠標點擊實時顯示在屏幕上&#xff0c;清晰直觀&#xff0c;特別適合教學、錄屏、…

Prufer序列 學習筆記

文章目錄 P r u f e r Prufer Prufer 序列對樹建立 P r u f e r Prufer Prufer 序列對 P r u f e r Prufer Prufer 序列重建樹 應用Cayley 公式[HNOI2004] 樹的計數「雅禮集訓 2017 Day8」共[THUPC 2018] 城市地鐵規劃CF156D Clues[ARC106F] Figures P r u f e r Prufer Pruf…

高性能場景使用Protocol Buffers/Apache Avro進行序列化怎么實現呢

我們以Protocol Buffers&#xff08;Protobuf&#xff09;和Apache Avro為例&#xff0c;分別展示高性能序列化的實現方式。 由于兩者都需要定義Schema&#xff0c;然后生成代碼&#xff0c;因此步驟包括&#xff1a; 1. 定義Schema文件 2. 使用工具生成Java類 3. 在代碼中…

iOS端網頁調試 debug proxy策略:項目中的工具協同實踐

移動開發中的調試&#xff0c;一直是效率瓶頸之一。特別是當前 Web 前端與 App 原生高度耦合的背景下&#xff0c;頁面調試不僅受限于瀏覽器&#xff0c;還要面對 WebView 實現差異、系統權限控制、設備多樣性等復雜情況。 但我們是否可以構建一套**“設備無關”的調試工作流*…

springboot項目啟動報錯:spring boot application in default package

啟動類報錯&#xff1a; 問題&#xff1a; springboot的啟動方法不能直接在java目錄下 解決&#xff1a; 1.使用CompentScan 和EnableAutoConfiguration注解 2.啟動類放在java目錄下的package目錄下

機器學習實驗報告5-K-means 算法

4.1 k-means算法簡介 聚類分析&#xff0c;作為機器學習領域中的一種無監督學習方法&#xff0c;在數據探索與知識發現過程中扮演著舉足輕重的角色。它能夠在沒有先驗知識或標簽信息的情況下&#xff0c;通過挖掘數據中的內在結構和規律&#xff0c;將數據對象自動劃分為多個類…

【已解決】yoloOnnx git工程部署

首先 yoloonnx一個VS工程下來整個工程大概1-2個g的大小因此在git的過程中總是會因為文件超過100M而觸發報錯&#xff0c;上傳不上去&#xff0c;因此現在需要做一個過濾才能把工程重新上傳上去&#xff0c;那么這個時候別人需要下載下來的時候確實不完整的工程&#xff0c;因此…

如何輕松地將照片從電腦傳輸到安卓手機

一些安卓用戶正在尋找有效可靠的方法&#xff0c;將照片從電腦傳輸到安卓設備。如果您也想將有趣或難忘的照片導入安卓手機或平板電腦&#xff0c;可以參考這篇文章&#xff0c;它提供了 6 種可靠的方法&#xff0c;讓您輕松傳輸照片。 第 1 部分&#xff1a;如何通過 Android …

準備純血鴻蒙理論高級認證的一些心得

最近在準備純血鴻蒙理論高級認證&#xff0c;一些心得記錄下來&#xff0c;希望早日考過高級&#xff01; 一、考試目標&#xff1a; HarmonyOS核心技術理念HarmonyOS應用架構設計ArkTS原理和實踐ArkUI開發HarmonyOS關鍵技術能力開發工程管理、代碼編輯、調試與定位應用上架運…

義烏購拍立淘API接入指南

一、接口概述 拍立淘是義烏購平臺提供的以圖搜貨服務&#xff0c;通過HTTP RESTful API實現。當前版本為v3.2&#xff0c;支持JPG/PNG格式圖片&#xff08;≤5MB&#xff09;&#xff0c;返回相似商品列表及供應鏈信息。 二、接入準備 申請開發者賬號 # 開發者注冊示例&…

Web 連接和跟蹤

大家讀完覺得有幫助記得及時關注和點贊&#xff01;&#xff01;&#xff01; 抽象 網絡跟蹤是一種普遍且不透明的做法&#xff0c;可實現個性化廣告、重新定位和轉化跟蹤。 隨著時間的推移&#xff0c;它已經演變成一個復雜的侵入性生態系統&#xff0c;采用越來越復雜的技術來…

前端技術棧與 SpreadJS 深度融合:打造高效數據表格應用

引言 在當今數字化的時代&#xff0c;數據表格應用在各種 Web 項目中扮演著至關重要的角色。從企業級的管理系統到電商平臺的商品展示&#xff0c;數據表格都是用戶與數據交互的重要界面。前端技術棧如 JavaScript、HTML 和 CSS 為構建用戶界面提供了強大的工具和方法&#xf…

如何用ai描述缺陷(bug)

附件1&#xff1a; 附件2&#xff1a; 將附件1和附件2發送給deepseek&#xff0c;且輸入對話框的文字&#xff1a; 然后進入禪道用戶登錄 - 禪道 ### **缺陷報告&#xff1a;登錄功能無響應缺陷** **提交平臺**&#xff1a;禪道缺陷管理系統 **發現環境**&#xff1a;測試環…

軟考 系統架構設計師系列知識點之雜項集萃(89)

接前一篇文章&#xff1a;軟考 系統架構設計師系列知識點之雜項集萃&#xff08;88&#xff09; 第161題 下面可提供安全電子郵件服務的是&#xff08; &#xff09;。 A. RSA B. SSL C. SET D. S/MIME 正確答案&#xff1a;D。 解析&#xff1a; MIME&#xff08;Multi…

開源 Arkts 鴻蒙應用 開發(一)工程文件分析

文章的目的為了記錄使用Arkts 進行Harmony app 開發學習的經歷。本職為嵌入式軟件開發&#xff0c;公司安排開發app&#xff0c;臨時學習&#xff0c;完成app的開發。開發流程和要點有些記憶模糊&#xff0c;趕緊記錄&#xff0c;防止忘記。 相關鏈接&#xff1a; 開源 Arkts …

protobuf遇到protoc-gen-go: unable to determine Go import path for “xxx“

問題 這個錯誤是因為 .proto 文件中缺少必需的 go_package 選項。在 protobuf 生成 Go 代碼時&#xff0c;這是關鍵配置項。 pandaVM:~/dev/pb$ protoc --go_out. pb.proto protoc-gen-go: unable to determine Go import path for "pb.proto"Please specify eithe…

linux unix socket 通信demo

好&#xff0c;下面是已經整合完善的版本&#xff1a; ? 功能點&#xff08;你要求的全部實現了&#xff09;&#xff1a; Unix Domain Socket (SOCK_STREAM) 服務端先啟動&#xff1a;正常通信 客戶端先啟動&#xff1a;等待服務端直到連接成功 客戶端每秒發送一條消息 服務端…

近期GitHub熱榜推薦

【1】fluentui-system-icons (HTML) &#x1f468;?&#x1f4bb; 作者&#xff1a; microsoft &#x1f4e6; 倉庫&#xff1a; microsoft / fluentui-system-icons &#x1f310; 鏈接&#xff1a; https://github.com/microsoft/fluentui-system-icons ? 星標&#xf…

Jupyter 是什么?基于瀏覽器的交互式計算環境

&#x1f9e0; 一、Jupyter 是什么&#xff1f; Jupyter 是一個基于瀏覽器的交互式計算環境&#xff0c;名字取自Julia Python R 三種語言&#xff0c;但現在已支持超過40種編程語言。它最核心的功能是讓你在同一個文檔&#xff08;.ipynb 文件&#xff09;中混合編寫代碼、…