leetcode 61 旋轉鍊錶

2021-09-24 05:51:41 字數 2771 閱讀 8250

方法1

'''

leetcode 61. 旋轉鍊錶

給定乙個鍊錶,旋轉鍊錶,將鍊錶每個節點向右移動 k 個位置,其中 k 是非負數。

演算法:每次將每個節點向右移動乙個位置,迴圈loop k次

'''# definition for singly-linked list.

class listnode:

def __init__(self, x):

self.val = x

self.next = none

class solution:

def rotateright(self, head: listnode, k: int) -> listnode:

if not head or head.next is none or k==0:

return head

new_head=listnode(0)

# 為鍊錶設定頭部哨兵節點

# 在整個程式的執行過程中,它一直是鍊錶的頭部

curr=head

length=0

while(curr):

length+=1

curr=curr.next

k=k%length

new_head.next=head

for i in range(k):

# 重複執行k次相同的操作,每次將列表中的所有元素向右移動1位

# 在執行向右移動一步的操作中,涉及到3個節點

# 頭部哨兵節點 new_head

# 鍊錶的真實頭部節點 new_head.next

# 鍊錶的尾部節點 tail

temp_node_before=new_head

temp_node=temp_node_before.next

while(temp_node.next is not none):

temp_node_before=temp_node_before.next

temp_node=temp_node.next

temp_node.next=new_head.next

new_head.next=temp_node

temp_node_before.next=none

return new_head.next

if __name__=="__main__":

new_head=listnode(0)

input=new_head

for i in range(0,3):

new_node=listnode(i)

new_head.next=new_node

new_head=new_head.next

output=solution().rotateright(input.next,200000000)

while(output):

print(output.val)

output=output.next

'''

leetcode 61. 旋轉鍊錶

給定乙個鍊錶,旋轉鍊錶,將鍊錶每個節點向右移動 k 個位置,其中 k 是非負數。

演算法:每次將每個節點向右移動乙個位置,迴圈loop k次

'''# definition for singly-linked list.

class listnode:

def __init__(self, x):

self.val = x

self.next = none

class solution:

def rotateright(self, head: listnode, k: int) -> listnode:

if not head or head.next is none or k==0:

return head

# 將單向鍊錶連線成環,求出當前鍊錶的長度,根據向右移動的步長設定新的鍊錶頭部和尾部

curr=head

# new_head=listnode(0)

# new_head.next=head

length=0

while(curr.next):

length+=1

curr=curr.next

length+=1

# print(length)

curr.next=head# 將單向鍊錶連線成環

new_index=length-(k%length)

out_head=head

out_tail=head.next

while(new_index-1):

out_head=out_head.next

out_tail=out_tail.next

new_index-=1

out_head.next=none

return out_tail

if __name__=="__main__":

new_head=listnode(0)

input=new_head

for i in range(3):

new_node=listnode(i)

new_head.next=new_node

new_head=new_head.next

output=solution().rotateright(input.next,4)

while(output):

print(output.val)

output=output.next

leetcode 61 旋轉鍊錶

deciription 給定乙個鍊錶,旋轉鍊錶,將鍊錶每個節點向右移動 k 個位置,其中 k 是非負數。示例 1 輸入 1 2 3 4 5 null,k 2 輸出 4 5 1 2 3 null 解釋 向右旋轉 1 步 5 1 2 3 4 null 向右旋轉 2 步 4 5 1 2 3 null示例 ...

LeetCode61 旋轉鍊錶

很久沒有寫blog了,以至於很長一段時間我都忘記了我還有乙個csdn賬號。也就是每週參加以下leetcode周競賽,膜拜一下大佬,然後發現自己真的是蠢以及一無是處,想的辦法總是,非常蠢。一般就做簡單的題目,這道題是leetcode估計實在是看不下去了,給我email說邀請我做個演算法題,我看了一下,...

LeetCode 61 旋轉鍊錶

問題描述 給定乙個鍊錶,旋轉鍊錶,將鍊錶每個節點向右移動 k 個位置,其中 k 是非負數。示例 1 輸入 1 2 3 4 5 null,k 2 輸出 4 5 1 2 3 null 解釋 向右旋轉 1 步 5 1 2 3 4 null 向右旋轉 2 步 4 5 1 2 3 null 示例 2 輸入 0...