亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將項目添加到鏈接列表的末尾會產生奇怪的結果

將項目添加到鏈接列表的末尾會產生奇怪的結果

慕婉清6462132 2021-05-11 17:21:55
我正在嘗試將元素添加到鏈接列表的末尾,但看不到這種情況。似乎總是在鏈接列表的末尾添加“無”。我不確定為什么會發生這種情況,并且我猜想這與我的.next設置不正確有關。我正在使用python來實現我的鏈表。有人可以幫我嗎下面是我的Node類class Node:     def __init__(self):        self.data = None        self.next = None        def get_data(self):        return self.data        def set_data(self, data):        self.data = data            def get_next(self):        return self.next        def set_next(self, node):        self.next = node這是我的帶有插入方法的鏈表類class SingleyLinkedList:        def __init__(self):        self.head = Node()        def insertAtHead(self, data):        currentNode = self.head        newNode = Node()        newNode.set_data(data)                  if currentNode != None:            newNode.set_next(currentNode)            self.head = newNode            print("Inserted ", data, " at the head")        else:            self.head.set_next(newNode)        def insertAtEnd(self, data):        currentNode = self.head                new_node = Node()        new_node.set_data(data)                while currentNode.get_next() != None:            currentNode = currentNode.next                currentNode.set_next(new_node)        print("Inserted ", data, " at end")        def printNode(self):        print("\nPrinting the nodes")        currentNode = self.head                while currentNode.next != None:            print(currentNode.data, " --> ", end="")            currentNode = currentNode.next        print(" NULL \n")s = SingleyLinkedList()s.insertAtHead(5)s.printNode()s.insertAtHead(10)s.printNode()s.insertAtHead(1)s.printNode()s.insertAtEnd(20)s.printNode()我得到以下結果,頭部插入5打印節點5-> NULL頭部插入10打印節點10-> 5-> NULL頭部插入1打印節點1-> 10-> 5-> NULL末尾插入20打印節點1-> 10-> 5->無-> NULL
查看完整描述

3 回答

?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

首先,您Node()擁有None不正確值的init head頭應該有一個空頭,這就是為什么None最后看到它的原因,因為它傳播到結尾,最后您不打印最后一個,Node()因為最后一個節點沒有next此條件,因此不顯示Node沒有下一個:


    while currentNode.next != None:

        print(currentNode.data, " --> ", end="")

        currentNode = currentNode.next

因此,您需要再打印一張。


下面的工作示例略有簡化:


class Node:

    def __init__(self, data=None, next=None):

        self.data = data

        self.next = next


    def get_data(self):

        return self.data


    def set_data(self, data):

        self.data = data


    def get_next(self):

        return self.next


    def set_next(self, node):

        self.next = node



class SingleyLinkedList:


    def __init__(self):

        self.head = None


    def insertAtHead(self, data):

        old_head = self.head

        self.head = Node(data, old_head)

        print("Inserted ", data, " at the head")



    def insertAtEnd(self, data):

        currentNode = self.head


        while currentNode.get_next() != None:

            currentNode = currentNode.next


        currentNode.set_next(Node(data))

        print("Inserted ", data, " at end")



    def printNode(self):

        print("\nPrinting the nodes")

        currentNode = self.head


        while currentNode.next != None:

            print(currentNode.data, " --> ", end="")

            currentNode = currentNode.next

        print(currentNode.data, " --> ", end="")

        print(" NULL \n")



s = SingleyLinkedList()


s.insertAtHead(5)

s.printNode()


s.insertAtHead(10)

s.printNode()


s.insertAtHead(1)

s.printNode()


s.insertAtEnd(20)

s.printNode()

輸出:


Inserted  5  at the head


Printing the nodes

5  -->  NULL 


Inserted  10  at the head


Printing the nodes

10  --> 5  -->  NULL 


Inserted  1  at the head


Printing the nodes

1  --> 10  --> 5  -->  NULL 


Inserted  20  at end


Printing the nodes

1  --> 10  --> 5  --> 20  -->  NULL 


查看完整回答
反對 回復 2021-05-18
?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

您的代碼中的問題是:


self.head = Node()


例如,當您實例化SingleyLinkedList類時。您正在將鏈接列表對象的頭分配給下一個為的此類節點None。


因此,您將獲得None打印聲明Printing the nodes 1 --> 10 --> 5 --> None --> NULL


下面是正確的代碼:


class Node:

    def __init__(self):

        self.data = None

        self.next = None


    def get_data(self):

        return self.data


    def set_data(self, data):

        self.data = data


    def get_next(self):

        return self.next


    def set_next(self, node):

        self.next = node


class SingleyLinkedList:


    def __init__(self):

        self.head = None


    def insertAtHead(self, data):

        newNode = Node()

        newNode.set_data(data)


        if self.head:

            newNode.next = self.head

            self.head = newNode


        else:

            self.head = newNode

        print "Inserted ", data, " at the head"


    def insertAtEnd(self, data):

        currentNode = self.head


        new_node = Node()

        new_node.set_data(data)


        while currentNode.get_next() != None:

            currentNode = currentNode.next


        currentNode.set_next(new_node)

        print("Inserted ", data, " at end")


    def printNode(self):

        print("\nPrinting the nodes")

        currentNode = self.head


        while currentNode != None :

            print currentNode.data,

            print " --> ",

            currentNode = currentNode.next

        print


s = SingleyLinkedList()


s.insertAtHead(5)

s.printNode()


s.insertAtHead(10)

s.printNode()


s.insertAtHead(1)

s.printNode()


s.insertAtEnd(20)

s.printNode()

輸出為:


Inserted  5  at the head


Printing the nodes

5  --> 

Inserted  10  at the head


Printing the nodes

10  -->  5  --> 

Inserted  1  at the head


Printing the nodes

1  -->  10  -->  5  --> 

Inserted  20  at end


Printing the nodes

1  -->  10  -->  5  -->  20  --> 



查看完整回答
反對 回復 2021-05-18
  • 3 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號