LeetCode 19 鍊錶(160)

2021-09-25 17:32:22 字數 2513 閱讀 5820

(1)

如圖, 鍊錶是一種非常常用的資料結構

煉表頭:指向第乙個鍊錶結點的指標

鍊錶結點:鍊錶中的每乙個元素,包括:(1)當前結點的資料,(2)下乙個結點的位址

鍊錶尾:不再指向其他結點的結點,其位址部分放乙個null,表示鍊錶到此結束。

(2)鍊錶可以動態地建立

動態地申請記憶體空間:

int

*pint = new int

(1024

); delete pint;

int*pint = new int[4

]; delete[

]pint;

動態地建立鍊錶結點:

我們也可以把動態申請記憶體空間的兩個操作符new和delete用來動態地申請和釋放結構體型別的空間,就可以把它用到鍊錶上了。下面的結構體只有兩部分,乙個是int型別的id乙個是指向student型別的指標。所以有了這個結構體我們就可以用這種方式來申請一片student型別的儲存空間,比如如下面程式所示,先定義乙個student型別的head,然後通過new student獲得一片用來存放student型別變數的一片記憶體空間,並且把這片記憶體空間的位址賦給了head,通過這種方式我們就可以動態建立鍊錶。

struct student; 

student *head;

head = new student;

(3)逐步建立鍊錶

(4)鍊錶元素的遍歷

#include

using namespace std;

struct student

;student *

create()

;int

main()

return0;

}

(5)刪除節點

1.假如被刪除節點是第乙個節點:

2.被刪除節點是中間節點,需要用兩個輔助指標,讓被刪除節點的前乙個節點直接指向後乙個節點

(6)插入結點。

1.在所有結點的前面插入結點

不能直接將head指向新的結點,若這樣就相當於切掉了head與後面所有結點的聯絡。所以當我們想再鍊錶中插入結點的時候,第一步一定是先讓新插入的結點指向它的後續結點。從而保證後續的結點不會被丟失掉。

將結點unit插在最前面的情況:

unit->next = head;

head = unit;

2.在鍊錶的中間插入結點

需要兩個輔助指標,將結點unit插入鍊錶:

圖中插入位置之前的結點由follow儲存,插入位置之後的結點由temp儲存。

編寫乙個程式,找到兩個單鏈表相交的起始節點。

如下面的兩個鍊錶:

對於a的每乙個節點,看是否b中有與其相等的節點。

這種方法時間複雜度為o(n^2)。

首先遍歷兩個鍊錶記錄下它們的長度lena和lenb,兩者長度差為x。若存在交點, 則從最後乙個結點到交點的位置兩個鍊錶的結點數一定是相同的,所以使較長的鍊錶先向後移動x個位置(使長鍊錶後面的長度與短鍊錶相同),再開始對兩個鍊錶同時進行遍歷(這是精髓),直到遍歷到第乙個相同結點時即為交點。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

while

(q!=

null)if

(p!=q)

return

null

;int dis =

abs(lena-lenb);if

(lena>lenb)

else

while

(heada!=headb)

return heada;}}

;

最後執行結果:

這種方法因為最後heada和headb同時遍歷,所以時間複雜度為o(n)。

見部落格:

leetcode 19 分隔鍊錶

給定乙個頭結點為 root 的鍊錶,編寫乙個函式以將鍊錶分隔為 k 個連續的部分。每部分的長度應該盡可能的相等 任意兩部分的長度差距不能超過 1,也就是說可能有些部分為 null。這k個部分應該按照在鍊錶 現的順序進行輸出,並且排在前面的部分的長度應該大於或等於後面的長度。返回乙個符合上述規則的鍊錶...

鍊錶 LeetCode19刪除鍊錶中的第N個節點

給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。示例 給定乙個鍊錶 1 2 3 4 5,和 n 2.當刪除了倒數第二個節點後,鍊錶變為 1 2 3 5.說明 給定的 n 保證是有效的。高階 你能嘗試使用一趟掃瞄實現嗎?分析 看到這個問題,第一反應,先求長度,再找節點,看一下高階,有...

Leetcode相交鍊錶 160

編寫乙個程式,找到兩個單鏈表相交的起始節點。如果鍊錶相交,那麼相交節點的位址是一樣的。public class solution while head2 null else return null 沒有相交節點,返回null 這種方法的時間複雜度為o m n 空間複雜度為o n 或o m 這個方法利...