題目描述:給定乙個鍊錶,旋轉鍊錶,使得每個節點向右移動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 現在請你閉眼在腦海創造一片虛無縹緲的空間,空間裡產生乙個盒...