本文和大家分享的主要是
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.二叉樹 查詢 插入 刪...