刷題 K個一組翻轉鍊錶

2022-08-11 04:36:12 字數 1974 閱讀 3900

給你乙個鍊錶,每 k 個節點一組進行翻轉,請你返回翻轉後的鍊錶。

k 是乙個正整數,它的值小於或等於鍊錶的長度。

如果節點總數不是 k 的整數倍,那麼請將最後剩餘的節點保持原有順序。

示例 :

給定這個鍊錶:1->2->3->4->5

當 k = 2 時,應當返回: 2->1->4->3->5

當 k = 3 時,應當返回: 3->2->1->4->5

說明 :

你的演算法只能使用常數的額外空間。

你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。

沒什麼可以說的直接暴力就好了,不過這裡用到了棧

# definition for singly-linked list.

# class listnode(object):

# def __init__(self, x):

# self.val = x

# self.next = none

class solution(object):

def reversekgroup(self, head, k):

""":type head: listnode

:type k: int

:rtype: listnode

"""dummy = point = listnode(0)

while true:

temp = head

count = k

stack =

while count and temp:

temp = temp.next

count -= 1

if count:

point.next = head

break

while stack:

point.next = stack.pop()

point = point.next

point.next = temp

head = temp

return dummy.next

每次放進去k個到stack裡面,然後取出來,取都選最上面的,所以這樣訪問的時候就正好達到了題目要求的效果。

按照道理來說這樣來說,應該就可以沒事啦,可以我看到一位大神的遞迴法當時就研究起來了,真的是只可意會不可言傳,估計要積攢很多解題的經驗才能有這樣的思路吧,好在緊忙看了半天搞懂了其中的思路,而且時間比上面的用棧的要快

一些值得注意的地方我也注釋了,解題嘛,用不同的方法去解決挺有成就感的,就像題目以各種方式去讓你失敗一樣,自己用多種方式去通過題目的測試很好玩。

# definition for singly-linked list.

# class listnode(object):

# def __init__(self, x):

# self.val = x

# self.next = none

class solution(object):

def reversekgroup(self, head, k):

cur = head # head是k個節點的第乙個

count = 0

while cur and count < k:

cur = cur.next

count += 1

if count == k:

cur = self.reversekgroup(cur, k) # 迴圈到最後不足k的節點(即次節點之後就是剩餘節點)

while count:

temp = head.next # 臨時存放head.next

head.next = cur

cur = head

head = temp #下乙個

count -= 1

head = cur

return head

LeetCode刷題 k個一組翻轉鍊錶

給出乙個鍊錶,每 k 個節點一組進行翻轉,並返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。給定這個鍊錶 1 2 3 4 5 當 k 2 時,應當返回 2 1 4 3 5 當 k 3 時,應當返回 3 2 1 4 5 你...

k個一組翻轉鍊錶

題目描述 給出乙個鍊錶,每 k 個節點一組進行翻轉,並返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。示例 給定這個鍊錶 1 2 3 4 5當 k 2 時,應當返回 2 1 4 3 5當 k 3 時,應當返回 3 2 1...

K 個一組翻轉鍊錶

給你乙個鍊錶,每 k 個節點一組進行翻轉,請你返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼請將最後剩餘的節點保持原有順序。示例 給定這個鍊錶 1 2 3 4 5 當 k 2 時,應當返回 2 1 4 3 5 當 k 3 時,應當返回 3 2 1...