欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:輕觸節(jié)點,鏈表里的悄然邂逅

柚子快報激活碼778899分享:輕觸節(jié)點,鏈表里的悄然邂逅

http://yzkb.51969.com/

公主請閱

1. 移除鏈表元素1. 題目說明示例 1示例 2示例 3

1.2 題目分析1.3 代碼部分1.4 代碼解析

2. 反轉(zhuǎn)鏈表2. 1題目說明示例 1示例 2示例 3

2.2 題目分析2.3 代碼部分2.4 代碼分析

1. 移除鏈表元素

題目傳送門

1. 題目說明

給你一個鏈表的頭節(jié)點 head 和一個整數(shù) val ,請你刪除鏈表中所有滿足 Node.val == val 的節(jié)點,并返回 新的頭節(jié)點 。

示例 1

輸入:head = [1,2,6,3,4,5,6], val = 6 輸出:[1,2,3,4,5]

示例 2

輸入:head = [], val = 1 輸出:[]

示例 3

輸入:head = [7,7,7,7], val = 7 輸出:[]

1.2 題目分析

題目給了我們一個鏈表,要求說讓我們將值等于val的鏈表刪除,并且返回新的頭結(jié)點 那么這個題我們該怎么進行解決呢? 我的想法是:我們可以通過設(shè)置一個哨兵位然后利用雙指針進行鏈表的遍歷,然后我們的兩個指針如果在遍歷過程中遇到了滿足條件的節(jié)點的話,我們直接忽略了,將這個節(jié)點的前一個節(jié)點的next的指針進行改變,指向這個節(jié)點的下一個節(jié)點,通過這種方法我們間接的將這個節(jié)點刪除了

1.3 代碼部分

/**

* Definition for singly-linked list.

* struct ListNode {

* int val;

* struct ListNode *next;

* };

*/

struct ListNode* removeElements(struct ListNode* head, int val)

{

//創(chuàng)建一個哨兵節(jié)點(tmp),哨兵節(jié)點的next指針指向頭結(jié)點

struct ListNode*tmp=(struct ListNode*)malloc(sizeof(struct ListNode));

tmp->next=head;

//雙指針

struct ListNode*prev=tmp;//慢指針--當(dāng)前節(jié)點的前一個節(jié)點,從哨兵衛(wèi)開始

struct ListNode*cur=head;//快指針遍歷鏈表的當(dāng)前節(jié)點,從頭結(jié)點開始

//遍歷整個鏈表

while(cur!=NULL)

{

if(cur->val==val)//如果當(dāng)前節(jié)點的值等于val的話,那么我們就跳過當(dāng)前節(jié)點

{

prev->next=cur->next;//當(dāng)前遍歷的節(jié)點的前一個節(jié)點的next將會直接指向當(dāng)前節(jié)點的下個節(jié)點

//就是說直接將當(dāng)前節(jié)點忽略掉了

}

else//當(dāng)前節(jié)點的值不等于val,那么我們繼續(xù)往后移動

{

//移動prev

prev=cur;

}

cur=cur->next;

}

//循環(huán)結(jié)束了,那么這個滿足條件的節(jié)點就刪除了

//重新定義頭結(jié)點,將哨兵衛(wèi)忽略就行了

struct ListNode*newHead=tmp->next;//用指針將頭節(jié)點進行定義

free(tmp);//釋放哨兵衛(wèi)

return newHead;//返回我們之前保存的頭結(jié)點的指針

}

1.4 代碼解析

我們先利用malloc動態(tài)申請一個節(jié)點賦值給tmp,這個tmp就是我們所說的哨兵位,用來占位子的 然后我們的tmp的next指針就指向我們原先的頭結(jié)點了 然后我們再創(chuàng)建兩個指針:

prev—慢指針,當(dāng)前節(jié)點的前一個節(jié)點,從哨兵位開始cur—當(dāng)前節(jié)點,從頭結(jié)點開始

說明:我們的這個哨兵位僅僅是一個空節(jié)點,并不存在實際的數(shù)據(jù)的,我們創(chuàng)建出來只是用來占位子的

然后我們就可以進行遍歷整個鏈表的操作了 遍歷的循環(huán)條件是我們的當(dāng)前節(jié)點cur不是空,就是只要到了尾節(jié)點我們就停下來了 我們在循環(huán)里面進行判斷,如果當(dāng)前節(jié)點的val滿足條件的話,我們讓這個節(jié)點的前一個節(jié)點指向這個節(jié)點的下一個節(jié)點,來達(dá)到間接刪除當(dāng)前的節(jié)點的作用 但是如果當(dāng)前節(jié)點不滿足的話我們就讓prev這個指針賦值為cur 然后在這個while循環(huán)的結(jié)束位置,我們就進行移動的操作,進行鏈表節(jié)點的遍歷操作 等循環(huán)結(jié)束了,我們這個鏈表中滿足條件的val就間接被刪除了 然后我們再重新定義頭結(jié)點 頭結(jié)點就是我們哨兵位的next指針指向的節(jié)點,這個時候我們的哨兵位的作用就發(fā)揮出來了 然后我們將哨兵位釋放掉就行了,這個題就結(jié)束了

2. 反轉(zhuǎn)鏈表

題目傳送門

2. 1題目說明

這是 LeetCode 第 206 題:反轉(zhuǎn)鏈表 的問題描述:

給定一個單鏈表的頭節(jié)點 head,請你反轉(zhuǎn)鏈表,并返回反轉(zhuǎn)后的鏈表。

示例 1

輸入: head = [1,2,3,4,5]輸出: [5,4,3,2,1]

示例 2

輸入: head = [1,2]輸出: [2,1]

示例 3

輸入: head = []輸出: []

限制條件

鏈表中節(jié)點的數(shù)量范圍是 [0, 5000]。-5000 <= Node.val <= 5000

2.2 題目分析

逆轉(zhuǎn)鏈表顧名思義就是鏈表逆置 假設(shè)當(dāng)前鏈表是1->2->3->4->5 逆置過后就是這個樣子的5->4->3->2->1

那么我們怎么進行下面的操作呢? 我們還是使用雙指針進行鏈表的遍歷,關(guān)于這個逆置的操作我們在遍歷的時候同時進行 同樣是定義兩個指針,然后在遍歷的時候?qū)?dāng)前的指向指向上一個節(jié)點,然后進行當(dāng)前節(jié)點的改變,改變相鄰兩個節(jié)點的指針,隨手遍歷結(jié)束,我們的尾節(jié)點就變成了頭結(jié)點,最后我們直接將頭結(jié)點進行返回就行了 請看下面代碼部分

2.3 代碼部分

/**

* Definition for singly-linked list.

* struct ListNode {

* int val;

* struct ListNode *next;

* };

*/

struct ListNode* reverseList(struct ListNode* head)

{

struct ListNode*prev=NULL;//定義當(dāng)前節(jié)點的前一個節(jié)點

//因為反轉(zhuǎn)后原始鏈表的頭節(jié)點將成為新鏈表的尾節(jié)點,它的下一個節(jié)點應(yīng)該指向 NULL。

struct ListNode*cur=head;//用于遍歷鏈表,從頭結(jié)點開始

while(cur!=NULL)//遍歷鏈表

{

struct ListNode*nexttmp=cur->next;//保存當(dāng)前節(jié)點的下一個節(jié)點

//下面的兩個代碼就是對當(dāng)前節(jié)點和當(dāng)前節(jié)點的前面進行操作,進行指針逆轉(zhuǎn)操作

cur->next=prev;//當(dāng)前節(jié)點的指針反轉(zhuǎn)了,指向了前一個節(jié)點

prev=cur;//當(dāng)前節(jié)點變成了前一個節(jié)點了

cur=nexttmp;//將cur移動到下一個節(jié)點的位置

}

//出了循環(huán)之后這個逆轉(zhuǎn)操作就完成了

return prev;//反轉(zhuǎn)后的鏈表prev成為了新的頭節(jié)點了

}

2.4 代碼分析

我們先定義一個指針prev指向前一個節(jié)點,但是初始化我們設(shè)置為NULL,然后我們再定義一個指針cur指向當(dāng)前的頭節(jié)點head 然后我們使用while循環(huán)進行遍歷鏈表,結(jié)束條件是遍歷到尾節(jié)點就停止 我們在循環(huán)里面先定義一個指針nexttmp將當(dāng)前節(jié)點的下個節(jié)點進行保存的操作 然后下面就是我們?nèi)齻€節(jié)點直接的指向變換了 我們讓當(dāng)前節(jié)點cur的下一個節(jié)點的指針next指向我們的前一個節(jié)點prev,然后我們讓這個前一個節(jié)點prev變成我們的當(dāng)前節(jié)點cur進行下一組相鄰節(jié)點的逆置操作 然后我們讓當(dāng)前的cur變成我們當(dāng)時保存的下一個節(jié)點的指針,我們現(xiàn)在對這兩個節(jié)點進行逆置操作 隨著循環(huán)結(jié)束,我們的最后prev就變成了新的頭結(jié)點了 我們將這個節(jié)點返回操作就行了

柚子快報激活碼778899分享:輕觸節(jié)點,鏈表里的悄然邂逅

http://yzkb.51969.com/

精彩內(nèi)容

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19606637.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄