国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python 數據結構之旋轉鏈表

2019-11-25 16:20:39
字體:
來源:轉載
供稿:網友

題目描述:給定一個鏈表,旋轉鏈表,使得每個節點向右移動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:       cur = cur.next       count += 1     # 為節省代碼量,這里是一個很有技巧的處理:用尾節點鏈接頭結點     cur.next = head     # 此處,k為cur從尾節點到要斷開部分的前驅需走的步數     k = count - k % count     # 找到前驅     while k != 0:       cur = cur.next       k -= 1     # 斷開     head = cur.next     cur.next = None     # 因為首尾已經相連,所以直接返回前驅后面的那個節點即可,此處引用為head     return head     # write your code here 

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

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河津市| 永年县| 旅游| 陈巴尔虎旗| 内江市| 三原县| 梁平县| 东丰县| 偃师市| 泸溪县| 历史| 龙井市| 峡江县| 静安区| 双城市| 连云港市| 义马市| 赫章县| 罗定市| 驻马店市| 沁阳市| 建水县| 凤山县| 浪卡子县| 卢湾区| 沁源县| 香港| 江达县| 灵寿县| 延安市| 黄浦区| 灌南县| 桑日县| 永德县| 区。| 施秉县| 赤城县| 海口市| 绥芬河市| 武功县| 青田县|