python練習 鍊錶

2021-10-04 22:07:46 字數 2070 閱讀 6751

鍊錶是最簡單的資料結構之一,包括單向鍊錶、雙向鍊錶、迴圈鍊錶。

每條鍊錶都由一系列節點(node)組成,節點包括兩部分:資料元素的值(value)和指向下乙個節點的指標(next)。

相比陣列,鍊錶可以更加靈活的儲存資料,不需要知道要儲存的資料有多少,這樣可以充分利用計算機的記憶體空間。鍊錶可以再任意位置插入或刪除資料,但是不允許隨意讀取資料。

在python3中定義乙個鍊錶資料結構:

class

listnode

:def

__init__

(self, data)

: self.value = data

self.

next

=none

問題描述:給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存一位數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。

示例

輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

思考:這裡會出現兩個問題

(1)兩個鍊錶不一樣長(包括乙個鍊錶是空鍊錶的情況)

(2)最後會出現進製

解決方法

class

solution

:def

addtwonumbers

(self, l1: listnode, l2: listnode)

-> listnode:

listnode_1 = l1

listnode_2 = l2

listnode_3 = listnode(0)

listnode_3_copy = listnode_3

carry =

0while

(listnode_1 or listnode_2)

:#解決第乙個問題

#在迴圈過程中,如果兩個鍊錶中有乙個為空,那就賦值為0

num_1 = listnode_1.val if listnode_1 else

0 num_2 = listnode_2.val if listnode_2 else

0#當前節點相加的結果是兩個鍊錶節點的值和進製值進行加和

value = num_1 + num_2 + carry

#由於存在head節點,所以相加結果要將個位上的數字存在結果鍊錶的下乙個節點中

#並將相加結果的十位上的數字賦值給進製變數carry

listnode_3_copy.

next

= listnode(value %10)

carry = value //

10#當前節點計算後,要將鍊錶節點轉到下乙個節點上

#如果有乙個鍊錶為空,就賦值為0

if listnode_1 !=

none

: listnode_1 = listnode_1.

next

if listnode_2 !=

none

: listnode_2 = listnode_2.

next

#將結果鍊錶的節點轉到下一節點處

listnode_3_copy = listnode_3_copy.

next

#解決第二個問題

#判斷兩個鍊錶最後乙個節點相加後是否存在進製的情況,如果有就將進製值賦給結果鍊錶的下乙個節點

if carry !=0:

listnode_3_copy.

next

= listnode(carry)

#返回結果鍊錶

return listnode_3.

next

鍊錶操作練習

本小題請務必重視,綜合了各種鍊錶操作 各種考試考題 可以做成乙個比較完整的工程,請設計測試程式進行測試,務必自己編寫 1 針對帶表頭結點的單鏈表,試編寫下列函式。1 建立函式create 根據一維陣列a n 建立乙個單鏈表,使單鏈表中各元素的次序與a n 中各元素的次序相同,要求該程式的時間複雜性為...

鍊錶例題練習

例題描述 將鍊錶中值小於x的節點放在鍊錶的前面,值大於等於x的節點放在鍊錶的後半部分。class listnode public listnode int val public class linkedlistinterview else send cur send指向cur所指的物件,當send指...

單向鍊錶練習

分析 當鍊表的頭節點是無效資料時 頭節點的next指標指向null,則表明此煉表無有效值 頭節點的next指標指向不為null時,則對鍊錶進行遍歷,統計其有效資料個數 獲取鍊錶長度 return public intgetvalidlength heronode temp head.next whi...