Python程式設計題50 設計單鏈表

2022-09-19 21:30:24 字數 2807 閱讀 6878

請設計乙個單鏈表,並在鍊錶類中實現下列操作:

說明:鍊錶節點的索引 index 是從 0 開始計算,比如鍊錶中索引 1 下的節點,指的是鍊錶中的第二個節點。

class listnode:  # 定義單鏈表

def __init__(self, val=0, next=none):

self.val = val # 鍊錶節點上儲存的元素

self.next = next # 指向下乙個鍊錶節點

class mylinkedlist:

def __init__(self):

self.dummy_head = listnode(0) # 定義虛擬頭節點

self.length = 0 # 定義鍊錶的長度

def get(self, index: int) -> int:

if 0 <= index < self.length:

cur = self.dummy_head

cur = cur.next # 因為多了乙個虛擬頭節點,所以需提前移動1位

while index: # 迴圈操作,讓 cur 移動 index 位

cur = cur.next

index -= 1

return cur.val

else: # 鍊錶節點不存在,直接返回-1

return -1

def add_at_head(self, val: int) -> none:

cur = self.dummy_head

old_head = cur.next # 臨時儲存原鍊錶的頭節點

cur.next = listnode(val=val, next=old_head) # 改變節點指向,讓虛擬頭節點通過 next 指向新加的節點,新節點則通過 next 指向原鍊錶的頭節點

self.length += 1 # 鍊錶長度+1

def add_at_tail(self, val: int) -> none:

cur = self.dummy_head

while cur.next is not none: # cur 不是鍊錶最後乙個節點

cur = cur.next

cur.next = listnode(val=val, next=none) # 鍊錶最後乙個節點通過 next 指向新加的節點,新節點則通過 next 指向none

self.length += 1 # 鍊錶長度+1

def add_at_index(self, index: int, val: int) -> none:

if 0 <= index <= self.length:

cur = self.dummy_head

while index: # 迴圈操作,讓 cur 移動 index 位

cur = cur.next

index -= 1

if index != self.length: # 如果 index 不等於鍊錶長度, 那麼讓cur通過 next 指向新加的節點,新節點則通過 next 指向cur的下個節點

post_head = cur.next

cur.next = listnode(val=val, next=post_head)

else: # 如果 index 恰好等於鍊錶長度,那麼在鍊錶末尾新增節點

cur.next = listnode(val=val, next=none)

self.length += 1 # 鍊錶長度+1

elif index < 0:

self.add_at_head(val)

def delete_at_index(self, index: int) -> none:

if 0 <= index < self.length:

cur = self.dummy_head

while index: # 迴圈操作,讓 cur 移動 index 位

cur = cur.next

index -= 1

cur.next = cur.next.next # 刪除節點

self.length -= 1 # 鍊錶長度-1

def list_node_to_list(node): # 將單向鍊錶轉換為列表

result =

while node:

node = node.next

return result

if __name__ == '__main__':

obj = mylinkedlist()

obj.add_at_head(10) # 在鍊錶開頭加新節點

obj.add_at_tail(3) # 在鍊錶末尾加新節點

print(list_node_to_list(obj.dummy_head.next))

obj.add_at_index(1, 2) # 在鍊錶索引1位置加新節點

print(list_node_to_list(obj.dummy_head.next))

print(obj.get(1))

obj.delete_at_index(1) # 刪除鍊錶索引1位置的節點

print(obj.get(1))

print(list_node_to_list(obj.dummy_head.next))

執行**後,得到如下結果:

[10, 3]

[10, 2, 3]23

[10, 3]

python程式設計題彙總(持續更新中……)

python程式設計題 python程式設計題庫

上期題目連線 1000道python題庫系列分享十一 9道 上期題目答案 本期題目 機器之心報道機器之心編輯部想要備戰 python 面試,這兩個專案有千道 python 問題與實現。之前機器之心介紹了 phd 大牛的求職之路,很多讀者感覺這位大牛太厲害了,他的經歷對我們幫助不大。對於一般的機器學習...

50道經典Java邏輯程式設計題 1 3

程式1 題目 古典問題 有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?1.程式分析 兔子的規律為數列1,1,2,3,5,8,13,21.class yue public int getyue class rabbi...

python程式設計 單繼承

繼承的作用 貓類和狗類都是動物類,但是又各有區別。如果沒有繼承,那麼貓類和狗類就都需要建立各自的方法 如果它們都繼承自動物類,那麼很多共同的地方就只需要在動物類中定義一次即可,精簡了 繼承前 繼承前,各個類都需要自己定義自己的方法,不夠精簡 class animal def shout self p...