pythonは反転部分の一方向チェーンを実現します。
タイトル:
シングルチェーンテーブルのヘッドポインタheadと2つの整数aとbを指定して、シングルチェーンテーブルでlinked_を反転させます。リスト[a-b]の結点は、チェーン全体の頭ポインタに戻ります。
たとえば:
シングルチェーン表[1000,5,12,100,45,‘cecil’,999]
a=4,b=6,
戻ってくるチェーンは[1000,5,12,100,999,cecil]で、つまり、
aとbはそれぞれ索引値である。aとbがインデックス範囲を超えたらエラーを返します。
コード:
私が書いたのは簡潔ではなく、煩わしいですが、走り通すことができます。煩雑な原因はforサイクルを使ったことです。a==0の場合はforサイクルが認識できません。
コアは依然として反転チェーンテーブルの針の問題であり、全てのサイクルであり、時間複雑度o(n)であり、空間複雑度はいくつかの変数である。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
シングルチェーンテーブルのヘッドポインタheadと2つの整数aとbを指定して、シングルチェーンテーブルでlinked_を反転させます。リスト[a-b]の結点は、チェーン全体の頭ポインタに戻ります。
たとえば:
シングルチェーン表[1000,5,12,100,45,‘cecil’,999]
a=4,b=6,
戻ってくるチェーンは[1000,5,12,100,999,cecil]で、つまり、
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)であり、空間複雑度はいくつかの変数である。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。