关于python中的链表

2024-05-16 08:40:11 发布

您现在位置: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,函数会是什么样子


Tags: 函数none节点defvalorimprimirno2no6
1条回答
网友
1楼 · 发布于 2024-05-16 08:40:11

诀窍是在链表中移动,然后向前看一个节点,寻找与该值匹配的节点。当存在匹配时,您应该更改当前节点的链接,以便它跳过具有该值的下一个节点

以下是函数:

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"]

<强>备注:< /强>考虑用节点{{CD1>}实现链接列表,而不是全局字典。

相关问题 更多 >