鍊錶是經典的遞迴定義的資料結構,鍊錶相關的題目常常考察遞迴,翻轉鍊錶是其中的經典題目。 在思考遞迴問題的時候,我們要從上到下思考:
#編寫乙個函式,使其可以刪除某個鍊錶中給定的(非末尾)節點,你將只
被給定要求被刪除的節點
node.val=node.next.val
node.next=node.next.next
給定乙個鍊錶: 1->2->3->4->5, 和 k = 2.
返回鍊錶 4->5.
1.第一時間想到的解法:
先遍歷統計鍊錶長度,記為 n ;
設定乙個指標走 (n-k)步,即可找到鍊錶倒數第 k 個節點。
使用雙指標則可以不用統計鍊錶長度。
class solution:
def getkthfromend(self, head: listnode, k: int) -> listnode:
count = 0
node = head
while node:
count += 1
node = node.next
node = head
n = count - k
while n:
node = node.next
n -= 1
return node
初始化: 前指標 former 、後指標 latter ,雙指標都指向頭節點 head 。
構建雙指標距離: 前指標 former 先向前走 kk 步(結束後,雙指標 former 和 latter 間相距 kk 步)。
雙指標共同移動: 迴圈中,雙指標 former 和 latter 每輪都向前走一步,直至 former 走過鍊錶 尾節點 時跳出(跳出後, latter 與尾節點距離為 k-1k−1,即 latter 指向倒數第 kk 個節點)。
返回值: 返回 latter 即可。
class solution:
def getkthfromend(self, head: listnode, k: int) -> listnode:
former, latter = head, head
for _ in range(k):
former = former.next
while former:
former, latter = former.next, latter.next
return latter
給定有序陣列: [-10,-3,0,5,9]
乙個可能的答案是:[0,-3,9,-10,null,5],它可以表示下面這個高度平衡二叉搜尋樹:
0/ \
-3 9
/ /
-10 5
# definition for a binary tree node.
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class solution:
def sortedarraytobst(self, nums: list[int]) -> treenode:
if not nums:
return none
mid = len(nums)//2
node = treenode(nums[mid])
left = nums[:mid]
right = nums[mid+1:]
node.left = self.sortedarraytobst(left)
node.right = self.sortedarraytobst(right)
return node
LeetCode 鍊錶題總結
最近花了幾天時間,將鍊錶題除帶鎖外的題目做完了,下面對鍊錶題部分題目進行總結和分析。1 鍊錶反轉 2 快慢指標 遇到一些需要找到鍊錶的中點問題時,可能會有鍊錶長度為奇數或者偶數的情況,當長度為偶數時,模板裡面 prev 為第乙個中點,slow 為第二個中點,長度為奇數時 slow 為鍊錶的中點。1....
leetcode 反轉鍊錶問題總結
第一次被問反轉鍊錶是被位元組,我沒想出來。後來在劍指offer上面看到了,我沒做出來。在leetcode和牛客上遇見,是那麼的熟悉。今天的每日一題還是思路不清晰。我意識到,我是時候寫點什麼了。希望下次遇到的時候思路清晰,一招斃命。反轉鍊錶i 反轉鍊錶ii 反轉鍊錶i是把整個鍊錶都反轉,相對來說容易一...
LeetCode鍊錶總結(待完成)
節點class listnode def init self,val 0,next none self.val val self.next next 空鍊錶 class linkedlist def init self self.head none 根據data初始化乙個新鍊錶 defcreate ...