LeetCode初級演算法 鍊錶篇

2021-10-02 10:41:45 字數 3365 閱讀 7308

請編寫乙個函式,使其可以刪除某個鍊錶中給定的(非末尾)節點,你將只被給定要求被刪除的節點。

現有乙個鍊錶 – head = [4,5,1,9],它可以表示為:

示例 1:

輸入: head = [4,5,1,9], node = 5 輸出: [4,1,9] 解釋: 給定你鍊錶中值為 5

的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 -> 1 -> 9. 示例 2:

輸入: head = [4,5,1,9], node = 1 輸出: [4,5,9] 解釋: 給定你鍊錶中值為 1

的第三個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 -> 5 -> 9.

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

else}}

;

給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。

示例:給定乙個鍊錶: 1->2->3->4->5, 和 n = 2.

當刪除了倒數第二個節點後,鍊錶變為 1->2->3->5. 說明:

給定的 n 保證是有效的。

高階:你能嘗試使用一趟掃瞄實現嗎?

快慢指標,找到節點後和第一題一樣

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

if(n==2)

}while

(n >0)

}while

(fast-

>next!=

null

) slow-

>next = slow-

>next-

>next;

return head;}}

;

反轉乙個單鏈表。

示例:輸入: 1->2->3->4->5->null 輸出: 5->4->3->2->1->null 高階:

你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題?

利用3根指標諸位反轉

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

listnode* mid = head-

>next;

listnode* left = head;

listnode* right = head-

>next-

>next;

left-

>next =

null

;while

(right-

>next!=

null

) mid-

>next = left;

right-

>next = mid;

return right;}}

;

將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。

示例:輸入:1->2->4, 1->3->4 輸出:1->1->2->3->4->4

有點歸併排序那意思了

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

else

listnode* temp=res;

while

(l1!=

null

||l2!=

null)if

(l2==

null)if

(l1-

>val >= l2-

>val)

else

}return res;}}

;

請判斷乙個鍊錶是否為回文鍊錶。

示例 1:

輸入: 1->2 輸出: false 示例 2:

輸入: 1->2->2->1 輸出: true 高階: 你能否用 o(n) 時間複雜度和 o(1) 空間複雜度解決此題?

利用棧和快慢指標實現,如果要做到o(1)的空間複雜度,需要翻轉後半部分的鍊錶,改變原資料。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

stack<

int> help;

while

(slow!=

null

)while

(!help.

empty()

)return

true;}

};

給定乙個鍊錶,判斷鍊錶中是否有環。

為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置(索引從 0 開始)。 如果 pos 是

-1,則在該鍊錶中沒有環。

示例 1:

輸入:head = [3,2,0,-4], pos = 1 輸出:true 解釋:鍊錶中有乙個環,其尾部連線到第二個節點。

示例 2:

輸入:head = [1,2], pos = 0 輸出:true 解釋:鍊錶中有乙個環,其尾部連線到第乙個節點。

示例 3:

輸入:head = [1], pos = -1 輸出:false 解釋:鍊錶中沒有環。

高階:你能用 o(1)(即,常量)記憶體解決此問題嗎?

經典問題,快慢指標

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

while

(fast!=slow)

;return

true;}

};

leetcode初級演算法 鍊錶

題目源自leetcode,方法都是自 cai 己 ji 寫的,可能比較符合菜雞們的思路 鍊錶是做到現在,感覺自己最拉垮的一節,資料結構真的都還給老師了 請編寫乙個函式,使其可以刪除某個鍊錶中給定的 非末尾 節點。傳入函式的唯一引數為 要被刪除的節點 示例 1 輸入 head 4,5,1,9 node...

LeetCode 初級演算法 環形鍊錶

給定乙個鍊錶,判斷鍊錶中是否有環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。示例 1 輸入 head 3,2,0,4 pos 1 輸出 true 解釋 鍊錶中有乙個環,其尾部連線到第二個節點。示例 2 輸...

LeetCode初級演算法之鍊錶 回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?思路一 借助外來的空間 這個題我的初步思路是借助外來的空間,也就不是o 1 的空間複雜度,那麼這個就比較簡單了,只...