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

2021-07-27 17:22:23 字數 1554 閱讀 1052

本文和大家分享的主要是

python資料結構

題目描述:給定乙個鍊錶,旋轉鍊錶,使得每個節點向右移動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

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

資料結構學習之 堆疊

堆疊 順序儲存 define maxsize 10 typedef int elemtype struct stack 1.判斷堆疊是否為空 int emptyst struct stack s 2.判斷堆疊是否已滿的函式 int fullst struct stack s 3.元素入棧 void ...

資料結構學習之Hash

一 hash定義 可譯作 雜湊 即把任意長度的輸入 預對映 通過雜湊演算法,變換成固定長度的輸出,該輸出就是雜湊值。這種轉換是一種壓縮對映,即雜湊值的空間常小於輸入的空間,不同的輸入可能會雜湊成相同的輸出,所以不可能從雜湊值來唯一的確定輸入值。二 常用hash函式 三 hashcode hashco...

資料結構學習

什麼是資料結構 對計算機記憶體中的資料的一種安排。資料結構有那些?優缺點?1.陣列 插入快 知道下標 查詢慢,刪除慢,大小固定 2.有序陣列 比無序的查詢塊,刪除和插入慢,大小固定 3.棧 吃多了吐 個人理解 4.佇列 吃多了拉 個人理解 5.鍊錶 插入快,刪除快,查詢慢 6.二叉樹 查詢 插入 刪...