在python链表的开头插入

2024-09-22 16:28:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python实现在链表的头部插入。我在引用这个guide。对于案例2,我发现我必须添加return self.head以使驱动程序代码正确插入头部,否则它将不会终止。为什么呢?我认为第一行足够了,因为我调用这个方法来修改链表。我为什么要回来

以下是节点前插入的代码:

class LinkedList:
    # note nodes = Node set the default (no argument) initialization
    def __init__(self, nodes = None):
        self.head = None
        if nodes is not None:
            # .pop(index) method remove the element from an array-like container and return it
            node = Node(nodes.pop(0))
            self.head = node
            # loop through the rest elements in nodes (2nd now became the 1st in nodes)
            for elem in nodes:
                node.next = Node(elem)
                node = node.next

    def insert_before(self, targetn_data, newn):
        # case1: empty list
        if self.head is None:
            raise Exception('empty llist')
            
        # case2: insert before head (newn becomes new head)
        if targetn_data == self.head.data:
            print(f'inserting {newn} at the head')
            newn.next = self.head
            self.head = newn
            ################# Why? ##################
            return self.head
            #########################################

        # case3: in between. use runner technique
        ...

驱动程序代码:

def main():
    nodes = [1, 2, 3, 4, 5, 6]

    # instantiate a linked list using __init__ method we defined
    llist = LinkedList(nodes)

    # insert_before driver code
    llist.insert_before(1, Node(100))
    llist.insert_before(6, Node(90))
    print(f'prints out the llist after insert_before: \n {llist}\n')

Tags: the代码inselfnonenodereturndef
1条回答
网友
1楼 · 发布于 2024-09-22 16:28:20
  • 该功能的实现取决于您。它可以改变
  • 至于他为什么使用返回是为了直接输出函数或其他任何步骤,案例3他们将运行这是不可预期的
  • 通常,当编写代码比编写if-else子句更好时,最好先使用exit或执行其余代码。(这里的exit是return语句)。
    • 对于其他看到代码的开发人员来说,这种编码方式很容易理解,这样他们就不必在嵌套的if-else案例中跟踪if-else

让我举例说明

public boolean function() {
    if (conditionA) {
        # Do something 1
    } else {
        # Do Something 2
    }

    return true/false;
}

// Different way You could write the code like this. 
// This will way cleaner and understandable 
// Than the previous version when there nested if-else.

public boolean function() {
    if (conditionA) {
        # Do something 1
        return true;
    } // Exit First 

    # Do Something 2
    return false;
}

对于单个if-else代码看起来很幼稚,但对于大型嵌套if-else代码来说会有很大帮助

但是,如果可以的话,这是一个很好的编码原则

相关问题 更多 >