Связанный список Python Linked - PullRequest
4 голосов
/ 23 января 2012

Я пытаюсь объединить связанный список Python без копирования данных, содержащихся в узлах списка.У меня есть функция, которая объединяет список, используя копии переданных узлов, но я не могу получить функцию, которая не использует копии для работы.

Эти функции предназначены для тестирования и синхронизации;Я знаю, что встроенный список Python просто великолепен!

Вот класс, с которым я работал, и функция сцепления.

class Cell:
    def __init__( self, data, next = None ):
        self.data = data
        self.next = next

def print_list(self):
    node = self
    while node != None:
        print node.data
        node = node.next

Функция объединения не должна быть членомфункция класса Cell.

def list_concat(A, B):
    while A.next != None:
        A = A.next
    A.next = B      
    return A

Эта функция перезаписывает первый элемент списка, если параметр A имеет более одного узла.Я понимаю, почему это происходит, но не знаю, как это исправить.

Вот код тестирования, который я использовал для этой функции.

e = Cell(5)
test = Cell(3, Cell(4))
test2 = list_concat(test2, e)   
test2.print_list()

Любое понимание илиПомощь будет принята с благодарностью.

* отредактирован для исправления форматирования кода

Ответы [ 2 ]

5 голосов
/ 23 января 2012

Попробуйте вместо этого:

def list_concat(A, B):
    current = A
    while current.next != None:
        current = current.next
    current.next = B
    return A

Присвоение новых значений параметрам функции является плохой практикой программирования, и код в вашем вопросе показывает, почему: вы использовали A для перебора исходного списка,и тем самым вы потеряли ссылку на его первый элемент.

0 голосов
/ 23 января 2012

Я не уверен насчет того, выполняет ли extend копирование или нет, но если нет, просто используйте

A.extend(B)
...