Python資料結構之旋轉鍊錶

2021-09-23 06:41:56 字數 1482 閱讀 8941

題目描述:給定乙個鍊錶,旋轉鍊錶,使得每個節點向右移動k個位置,其中k是乙個非負數

樣例:給出鍊錶1->2->3->4->5->null和k=2;返回4->5->1->2->3->null

首先,觀察一下這個題目要達到的目的,其實,換一種說法,可以這樣來描述:給出乙個k值,將鍊錶從倒數第k個節點處起之後的部分移動到鍊錶前面,就樣例來說,其實是將4->5這一部分移動到整個鍊錶前面,變成4->5->1->2->3->null。不過,需要注意的是,題中沒有給出k的大小,當k比鍊錶的長度還大的時候,我們就需要先用k對鍊錶的長度求餘,比如,如果k = 7,那麼上面的例子還是將4->5移動到整個鍊錶前面。

所以說,這個題的思路可以這樣來總結:

1. 先求出整個鍊錶的長度

2. 根據k值找到需要移動的部分鍊錶的前驅(樣例中的3)

3. 在前驅之後將鍊錶斷開,移動後半部分

**如下:

# definition for singly-linked list.  

# class listnode:  

#   def __init__(self, x):  

#     self.val = x

#     self.next = none

class solution:  

# @param head: the list  

# @param k: rotate to the right k places  

# @return: the list after rotation  

def rotateright(self, head, k):  

if head is none:  

return head  

cur = head

count = 1

# 計算鍊錶長度  

while cur.next:  

curcur = cur.next 

count += 1 

cur.next = head

# 此處,k為cur從尾節點到要斷開部分的前驅需走的步數  

k = count - k % count  

# 找到前驅  

while k != 0:  

curcur = cur.next 

k -= 1

# 斷開  

head = cur.next 

cur.next = none

# 因為首尾已經相連,所以直接返回前驅後面的那個節點即可,此處引用為head  

return head  

# write your code here  

需要注意的是21行首尾相連的技巧,這大大節省了我們的**量,其實,就按之前思路中所描述的一步步來,也沒問題。但是這個技巧確實很棒,值得學習。具體的細節我寫在了**注釋裡。

Python資料結構學習之旋轉鍊錶詳解

本文和大家分享的主要是 python資料結構 題目描述 給定乙個鍊錶,旋轉鍊錶,使得每個節點向右移動k 個位置,其中 k是乙個非負數 樣例 給出鍊錶1 2 3 4 5 null 和k 2 返回4 5 1 2 3 null 首先,觀察一下這個題目要達到的目的,其實,換一種說法,可以這樣來描述 給出乙個...

python資料結構之鍊錶

鍊錶 linked list 由於python是動態語言,可以直接把物件賦值給新的變數,於是在python一切皆為物件的原理上實現鍊錶的各項操作。在實現鍊錶python類的屬性和方法操作之前,先整理一些鍊錶的理論知識。一 鍊錶的基本結構鍊錶是通過乙個個節點 node 組成的,每個節點都包含了稱為資料...

資料結構 Python實現 之鍊錶

理解資料結構最好的方式就是用腦洞把它想象出來。一 節點 class node def init self,data none self.data data self.left none self.right none node node 5 現在請你閉眼在腦海創造一片虛無縹緲的空間,空間裡產生乙個盒...