您好,登錄后才能下訂單哦!
題目:
給定一個單鏈表的頭指針 head, 以及兩個整數 a 和 b,在單鏈表中反轉 linked_list[a-b] 的結點,然后返回整個鏈表的頭指針。
例如:
單鏈表[1000, 5, 12, 100, 45, ‘cecil', 999],
a = 4, b = 6,
返回的鏈表是[1000, 5, 12, 100, 999, ‘cecil', 45],也就是說,
a 和 b分別為索引值。如果a 和 b 超過了索引范圍就返回錯誤。
代碼:
我寫的不夠簡潔,比較繁瑣,但是能跑通,繁瑣的原因在于我使用了 for 循環,對于 a == 0 的情況 for 循環無法識別。
def reverse_part_linked_list(head, a, b): # 反轉部分鏈表結點,a, b分別為索引值 if head == 0: print "Empty linked list. No need to reverse." return head p = head length = 1 while p != 0: length += 1 p = p.next if length == 1: print "No need to reverse." return head if a < 0 or b > length-1 or a >= b: raise Exception("The given 'from' value and 'to' value is wrong.") p = head if a == 0: # 由于 for 循環中 xrange 的范圍問題,我就分情況寫了。 tail, head = p, p pre = 0 for _ in xrange(a, b+1): p = p.next head.next = pre pre = head head = p tail.next = p return head else: for _ in xrange(1, a): p = p.next front, tail, head = p, p, p p = p.next pre = 0 for _ in xrange(a+1, b+2): p = p.next head.next = pre pre = head head = p front.next = pre tail.next = p return head
分析:
核心依然是反轉鏈表的指針問題,均是一遍循環,時間復雜度o(n),空間復雜度為若干個變量。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。