單鏈表oj

練習

1. 刪除val節點

oj鏈接

這道題最先想出來的方法肯定是在遍歷鏈表的同時刪除等于val的節點,我們用第二中思路:不等于val的節點尾插,讓后返回新節點。代碼如下:

struct ListNode* removeElements(struct ListNode* head, int val) {struct ListNode* newhead = NULL,*tail = NULL,*cur = head;//tail解決尾插每次都要找尾的問題while(cur){if(cur->val == val){struct ListNode* del = cur;cur = cur->next;free(del);}else{if(newhead == NULL){newhead = tail = cur;}else{tail->next = cur;tail = cur;}cur = cur->next;tail->next = NULL;}}return newhead;
}

2.返回中間節點

oj鏈接

找中間節點,利用快慢指針,快指針一次走兩步,慢指針一次走一步。快指針到終點,慢指針剛好走一半,慢指針走到的節點就是中間節點。唯一的區別就是偶數個節點和奇數個節點判斷結束的條件略有不同。

struct ListNode* middleNode(struct ListNode* head) {struct ListNode* slow = head;struct ListNode* fast = head;while(fast && fast->next){slow = slow->next;fast = fast->next->next;}return slow;
}

3.合并鏈表

oj鏈接

這道題的思路和第一題大同小異,就是小的尾插。

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {if(list1 ==NULL)return list2;if(list2 == NULL)return list1;    struct ListNode* head1 = list1;struct ListNode* head2 = list2;struct ListNode* newhead =NULL, *tail = NULL;while(head1 && head2){if(head1->val < head2->val){if(newhead == NULL){newhead = tail = head1;}else{tail->next = head1;tail = tail->next;}head1 = head1->next;}else{if(newhead == NULL){newhead = tail = head2;}else{tail->next = head2;tail = tail->next;}head2 = head2->next;}}if(head1){tail->next = head1;}if(head2){tail->next = head2;}return newhead;
}

4.反轉鏈表

oj鏈接

方法一: 頭插

struct ListNode* reverseList(struct ListNode* head) {struct ListNode* cur = head;struct ListNode* newhead = NULL;while(cur){struct ListNode* next = cur->next;cur->next = newhead;newhead = cur;cur = next;} return newhead;
}

方法二:每個節點挨個反轉

// 方法二:每個節點挨個反轉
struct ListNode* reverseList(struct ListNode* head) {if(NULL == head){return NULL;}struct ListNode* n1 = NULL;struct ListNode* n2 = head;struct ListNode* n3 = n2->next;while(n2){n2->next = n1;n1 = n2;n2 = n3;if(n3)n3 = n3->next; }return n1;
}

5.鏈表分割

?oj鏈接

?這道題小于x的尾插一個鏈表,大于等于x的尾插另一個鏈表。最后把兩個鏈表連接起來。兩個鏈表使用帶哨兵位的頭結點會方便一些。

class Partition {
public:ListNode* partition(ListNode* pHead, int x) {// write code herestruct ListNode* lesshead,*lesstail,*greathead,*greattail;lesshead = lesstail =(struct ListNode*)malloc(sizeof(struct ListNode));greathead = greattail = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* cur = pHead;while(cur){if(cur->val < x){lesstail->next = cur;lesstail = lesstail->next;}else {greattail->next = cur;greattail = greattail->next;}cur = cur->next;}lesstail->next = greathead->next;greattail->next = NULL;pHead = lesshead->next;free(lesshead);free(greathead);return  pHead;}
};

6.鏈表的回文結構?

oj鏈接

這道題先找到中間節點,再反轉中間節點后面的鏈表,之后再逐一對比即可。

struct ListNode* middleNode(struct ListNode* head){struct ListNode* slow =head,*fast = head;while(fast && fast->next){slow = slow->next;fast = fast->next->next;}return slow;
}
struct ListNode* reverseList(struct ListNode* head){struct ListNode* curr = head,*prev = NULL;while(curr){struct ListNode* tmp = curr->next;curr->next  =  prev;prev = curr;curr = tmp;}return  prev;
}
class PalindromeList {
public:bool chkPalindrome(ListNode* A) {// write code herestruct ListNode* mid =  middleNode(A);struct ListNode* rmid = reverseList(mid);while(rmid){if(A->val != rmid->val){return false;}else {A = A->next;rmid = rmid->next;}}return true;}
};

7.相交鏈表

oj鏈接?

?

?先判斷是否相交,計算兩鏈表的長度,長鏈表先走長度的差值,之后一起走找相交節點即可。

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {struct ListNode* list1 = headA;struct ListNode* list2 = headB;int len1 = 1,len2 = 1;while(list1->next){list1 = list1->next;++len1;}while(list2->next){list2 = list2->next;++len2;}if(list1 != list2){return NULL;}int len = abs(len1-len2);struct ListNode* shortlist = headA;struct ListNode* longlist =  headB;if(len1 > len2){shortlist = headB;longlist = headA;}while(len--){longlist = longlist->next;}while(longlist != shortlist){longlist = longlist->next;shortlist = shortlist->next;}return shortlist;
}

8.環形鏈表

?oj鏈接

?

利用快慢指針解決,如果有環快慢指針會相遇。

bool hasCycle(struct ListNode *head) {struct ListNode* fast = head,*slow = head;while(fast && fast->next){slow = slow->next;fast = fast->next->next;while(fast == slow){return true;}}return false;
}

9.環形鏈表 ||

oj鏈接?

讓一個指針從鏈表起始位置開始遍歷鏈表,同時讓一個指針從判環時相遇點的位置開始繞環 運行,兩個指針都是每次均走一步,最終肯定會在入口點的位置相遇。

struct ListNode *detectCycle(struct ListNode *head) {struct ListNode* fast = head,*slow = head;while(fast && fast->next){slow = slow->next;fast = fast->next->next;//帶環if(fast == slow){struct ListNode* meet = slow;while(head != meet){meet = meet->next;head = head->next;}return meet;}}return NULL;}

?證明:

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

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

相關文章

XML基礎知識

1. 常見配置文件類型 properties文件,例如druid連接池就是使用properties文件作為配置文件 XML文件,例如Tomcat就是使用XML文件作為配置文件 YAML文件,例如SpringBoot就是使用YAML作為配置文件 json文件,通常用來做文件傳輸&#xff0c;也可以用來做前端或者移動端的配置文件…

軟考高級-信息系統項目管理師案例題選擇題做題總結

1.不應該只會建立變更和配置管理的規則&#xff0c;應該建立變更控制流程 2.變更的影響不應該只由工程師評估 3.沒有對變更和修改進行記錄 4.變更完成后&#xff0c;客戶沒有對變更進行驗證 5.變更沒有通知相關人員 6.變更沒有和配置管理關聯 7.項目變更管理的工作流程&#xf…

SOLIDWORKS科研版的介紹

SOLIDWORKS科研版的介紹 針對研究項目充分利用軟件功能&#xff0c;無任何限制訪問有關工程和科學的最新技術&#xff0c;并與世界各地的其他用戶進行交流。 SOLIDWORKS科研版可為研究人員提供有關 SOLIDWORKS 設計和科學工程技術的最新知識&#xff0c;并使他們與世界范圍內的…

08.CNN

文章目錄 Observation 1Pooling - Max PoolingFlattenApplication&#xff1a;Playing Go使用驗證集選擇模型食物分類 Observation 1 Pooling - Max Pooling Pooling主要為了降低運算量&#xff0c;現在一般不用了&#xff0c;全convolution Flatten Application&#xff1a;P…

學校上課,是耽誤我學習了。。

>>上一篇&#xff08;文科生在三本院校&#xff0c;讀計算機專業&#xff09; 2015年9月&#xff0c;我入學了。 我期待的大學生活是多姿多彩的&#xff0c;我會參加各種社團&#xff0c;參與各種有意思的活動。 但我是個社恐&#xff0c;有過嘗試&#xff0c;但還是難…

Linux|如何在 awk 中使用流控制語句

引言 當您從 Awk 系列一開始回顧我們迄今為止介紹的所有 Awk 示例時&#xff0c;您會注意到各個示例中的所有命令都是按順序執行的&#xff0c;即一個接一個。但在某些情況下&#xff0c;我們可能希望根據某些條件運行一些文本過濾操作&#xff0c;這就是流程控制語句的方法。 …

鯨尾識別獲獎方案總結

文章目錄 1st solution(classification)2nd place code, end to end whale Identification model3rd place solution with code: ArcFace4th Place Solution: SIFT Siamese5th solution blog post code -Siamese7th place Pure Magic thanks Radek solution: classification9…

QGIS DEM數據快速獲取

背景 Dem 是非常重要的數據&#xff0c;30 m 的精度也是最容易獲取的&#xff0c;目前有很多種方式可以獲取&#xff0c;比如地理空間數據云&#xff0c;今天介紹用 QGIS插件獲取。 這種方式的最大優勢是方便快捷。 插件下載與安裝 插件-管理并安裝插件-搜索下載 OpenTopogr…

linux:信號深入理解

文章目錄 1.信號的概念1.1基本概念1.2信號的處理基本概念1.3信號的發送與保存基本概念 2.信號的產生2.1信號產生的五種方式2.2信號遺留問題(core,temp等) 3.信號的保存3.1 信號阻塞3.2 信號特有類型 sigset_t3.3 信號集操作函數3.4 信號集操作函數的使用 4.信號的處理4.1 信號的…

C# Winform實現五子棋游戲(代完善)

實現了基本的玩法。 BoardController.cs using System;namespace GomokuGame {public class BoardController{private static BoardController instance;private readonly int[,] board;private const int boardSize 15;private BoardController(){board new int[boardSize…

uniapp(h5 app) 中 webview和h5通信

1 uniapph5 和h5頁面 通信 h5 window.parent.postMessage(message, *); uniapph5 onload中 window.addEventListener(message, function (e) { // 監聽 message 事件 //console.log(e.origin) console.log(收到的cocos游戲ID,e.data) …

Python實現天氣數據采集

Python實現天氣數據采集 一、需求介紹二、完整代碼一、需求介紹 本次天氣數據采集的需求是獲取每日的最高溫、最低溫、風力、風向、天氣狀況、AQI指數,如圖所示,完整代碼附后: 本次采集的目標網址是2345天氣網: 上圖的URL中,beijing是城市名稱的縮寫,54511即為城市代碼…

數據庫設計步驟and相關注意點

文章目錄 前言數據庫設計的主要步驟1.需求分析2.概念結構設計3.邏輯結構設計4.物理結構模型設計5.數據庫實施和維護給出一些題目理解一下吧~ 總結 前言 學無止境&#xff0c;筆勤不輟。最近筆者狀態不是特別好&#xff0c;一直忙于應付課程作業&#xff0c;于是一直沒有時間更…

科技引領未來:高速公路可視化

高速公路可視化監控系統利用實時視頻、傳感器數據和大數據分析&#xff0c;通過圖撲 HT 可視化展示交通流量、車速、事故和路況信息。交通管理人員可以實時監控、快速響應突發事件&#xff0c;并優化交通信號和指揮方案。這一系統不僅提高了道路安全性和車輛通行效率&#xff0…

vue3結合element-plus之如何優雅的使用表格

背景 表格組件的使用在后臺管理系統中是非常常見的,但是如果每次使用表格我們都去一次一次地從 element-plus 官網去 復制、粘貼和修改成自己想要的表格。 這樣一來也說得過去,但是如果我們靜下來細想不難發現,表格的使用都是大同小異的,每次都去復制粘貼,對于有很多表格…

vue3封裝ElementUI plus Dialog彈窗

因為ElementuiPlus的dialog彈框的初始樣式不太好看,而公司要求又要好看,本來是已經實現了,但是后來想想了發現封裝完dialog的其他功能也要,所以特此記錄一下 方案一 思路:封裝一個組件,將所有新增的參數引入el-dialog 參數中,實現參數共用 新建一個組件,將官網暴露的屬性全部引…

C++開源庫glog使用封裝--自定義日志輸出格式,設置日志保留時間

glog下載和編譯 glog開源地址 https://github.com/google/glog glog靜態庫編譯 cd /home/wangz/3rdParty/hldglog/glogmkdir out mkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX../out -DCMAKE_BUILD_TYPERelease -DBUILD_SHARED_LIBSOFF本文選擇的glo…

網關路由SpringCloudGateway、nacos配置管理(熱更新、動態路由)

文章目錄 前言一、網關路由二、SpringCloudGateway1. 路由過濾2. 網關登錄校驗2.1 鑒權2.2 網關過濾器2.3 登錄校驗2.3.1 JWT2.3.2 登錄校驗過濾器 3. 微服務從網關獲取用戶4. 微服務之間用戶信息傳遞 三、nacos配置管理問題引入3.1 配置共享3.1.1 在Nacos中添加共享配置3.1.2 …

【前端三劍客之HTML】詳解HTML

1. HTML(超文本標記語言) HTML意為超文本標記語言&#xff0c;其可以通過標簽把其他網頁/圖片/視頻等資源引入到當前網頁中&#xff0c;讓網頁最終呈現出來的效果超越了文本.HTML是一種標記語言&#xff0c;其是由一系列標簽組成的. 而且每個標簽都有特定的含義和確定的頁面顯…

Vue 3入門指南

title: Vue 3入門指南 date: 2024/5/23 19:37:34 updated: 2024/5/23 19:37:34 categories: 前端開發 tags: 框架對比環境搭建基礎語法組件開發響應式系統狀態管理路由配置 第1章&#xff1a;Vue 3簡介 1.1 Vue.js的歷史與發展 Vue.js由前谷歌工程師尤雨溪&#xff08;Eva…