方法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...