Почему вызов функции и запись операторов явно работают по-разному в Python? - PullRequest
0 голосов
/ 28 марта 2020

Мне нужна операция вставки в заголовок для связанного списка, который я реализовал. Однако выполнение этой операции с помощью вызова функции (например, insertToHead) и явной записи операторов там, где они мне нужны, дают разные результаты. Интересно, какое свойство Python приводит к этой разнице, но я не могу понять это.

Чтобы быть более точным c, допустим, у меня есть следующий класс для связанного списка:

class Node:
    value = None
    nextNode = None

    def __init__(self, value):
        self.value = value

    def insertToHead(self, value):
        newHead = Node(value)
        newHead.nextNode = self
        return newHead

Для связанного списка с одним элементом (скажем, 2) я хочу вставить узел (скажем, 0) в заголовок, чтобы создать связанный список 0 -> 2.

I создал связанный список следующим образом

head = Node(2)

Затем я попытался вставить 0 в заголовок двумя способами:

  1. Явно писать операторы там, где они мне нужны
newHead = Node(0)
newHead.next = head
head = newHead

Теперь head равно 0, а не 0 -> 2.

Вызов insertToHead
head = head.insertToHead(0)

head равен 0 -> 2 после этого утверждения.

Кто-нибудь знает, почему эти два подхода приводят к разным результатам?

Ответы [ 2 ]

1 голос
/ 28 марта 2020

У вас есть опечатка. newHead.next должно быть newHead.nextNode.

0 голосов
/ 28 марта 2020

Простая реализация односвязных списков:

class Node:
    def __init__(self, value = None, nextNode = None):
        self.value = value
        self.nextNode = nextNode

class LinkedList:
    def __init__(self):
        self.head = None  # will point to the head of the list
        self.tail = None  # will point to the tail of the list
        self.size = 0     # size of the linked list

    def insert_to_head(self, data):
        # when push front, the head of the linked list will be Node()
        self.head = Node(data, self.head)
        if self.tail == None:  # if tail is None, means it is a single element
            self.tail = self.head
        self.size += 1  # increase size by one


    def __str__(self):
        ret_str = ""
        node = self.head
        while node != None:
            ret_str += str(node.value) + " -> "
            node = node.nextNode
        return ret_str




myLinkedList = LinkedList()
myLinkedList.insert_to_head(3)
myLinkedList.insert_to_head(2)

print(myLinkedList)

...