簡體   English   中英

關於python中的鏈表

[英]About linked lists in python

我需要創建一個函數,以從該函數內部手動給出的值中從鏈表中刪除節點,但我不知道如何做到這一點。 我的算法是這樣的:

noRaiz = None

def novoNo(valor):
    return {
        "valor": valor,
        "proximo": None
    }
def remove(valor):
global noRaiz
if noRaiz is None:
    return
noAtual = noRaiz
if noRaiz["valor"] == valor:
    noRaiz = noRaiz["proximo"]


def imprimir():
    noAtual = noRaiz
    while noAtual is not None:
        print(noAtual["valor"])
        noAtual = noAtual["proximo"]


noRaiz = novoNo(54)
no2 = novoNo(26)
no3 = novoNo(93)
no4 = novoNo(17)
no5 = novoNo(77)
no6 = novoNo(31)

noRaiz["proximo"] = no2
no2["proximo"] = no3
no3["proximo"] = no4
no4["proximo"] = no5
no5["proximo"] = no6
no6["proximo"] = None


imprimir()

noRaiz 是列表中的第一個節點, noAtual 是運行代碼時打印時列表中的當前節點, imprimir() 是打印節點的函數。 如果我想刪除節點 54 或 17,函數會是什么樣子?

訣竅是遍歷鏈表並在前面查找一個節點以查找與該值匹配的節點。 當匹配時,您應該更改當前節點的鏈接,以便它跳過具有該值的下一個節點。

這是函數:

def remove(valor):
    global noRaiz
    if noRaiz is None:  # Nothing to do
        return
    noAtual = noRaiz
    if noRaiz["valor"] == valor:  # Special case
        noRaiz = noRaiz["proximo"]
        return
    while noAtual["proximo"] is not None:
        if noAtual["proximo"]["valor"] == valor:
            noAtual["proximo"] = noAtual["proximo"]["proximo"]
            break
        noAtual = noAtual["proximo"]

備注:考慮使用 Node class而不是全局字典來實現您的鏈表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM