繁体   English   中英

删除链表中的头节点

[英]deleting the head node in a linked list

如何修复delete方法,使其也可以删除头节点?

class LinkedListNode():
    def __init__(self, data=None, next_node=None):
        self.data = data
        self.next_node = next_node


    def data(self):
        return self.data


    def next_node(self):
        return self.next_node


    def set_next_node(self, next_node):
        self.next_node = next_node

    def search(self, data):
        index = 0
        while self.next_node != None and self != None:
            if self.data == data:
                return index
            else:
                self = self.next_node
                index += 1
        return -1

    def delete(self, data):
        head = self
        if self.data == data:
            head = self.next_node
        while self.next_node != None and self != None:
            if self.next_node.data == data:
                if self.next_node.next_node != None:
                    self.next_node = self.next_node.next_node
                else:
                    self.next_node = None
            else:
                self = self.next_node
        return head


    def print(self):
        while self.next_node != None:
            print("%s: %s" % ("current node data is", self.data))
            self = self.next_node
        if self.next_node == None and self != None:
            print("%s: %s" % ("current node data is", self.data))

在测试文件中,我有:

from LinkedListNode import *

head = LinkedListNode(3)
node1 = LinkedListNode('cat')
node2 = LinkedListNode('dog')
node3 = LinkedListNode(4)
head.set_next_node(node1)
node1.set_next_node(node2)
node2.set_next_node(node3)

print(head.search('dog'))
head.delete(3)
head.delete(4)
head.print()

我得到:

2
current node data is: 3
current node data is: cat
current node data is: dog

Process finished with exit code 0

首先,我相信您不应该在搜索方法中重新分配“自我”:

def search(self, data):
    index = 0
    while self.next_node != None and self != None:
        if self.data == data:
            return index
        else:
            self = self.next_node
            index += 1
    return -1

将其替换为简单的递归版本,然后重试:

def search(self, data):
    if self.data == data:
        return 0
    elif self.next_node == None:
        return -1
    else:
        idx = self.next_node.search(data)
        if idx == -1:
            return -1
        else:
            return 1 + idx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM