Вы делаете какие-то странные вещи:
A = Cell(8,Cell(9,Cell(10)))
предполагает, что ваша ячейка похожа на
class Cell(object):
def __init__(self, val, nxt=None):
self.val = val
self.next = nxt
, но выполнение
C = Cell(A)
никогда ничего не копирует, этопросто создает новую ячейку с тем же значением A, что и для значения.
Итак, давайте начнем с ячейки, которая на самом деле может копировать себя:
class Cell(object):
def __init__(self, val, nxt=None):
self.val = val
self.next = nxt
def copy(self):
if self.next is None:
return Cell(self.value)
else:
return Cell(self.value, self.next.copy())
Теперь ваш конкат прост:
def concat_copy(a, b):
new = a.copy()
# find the end of the copy
last = new
while last.next is not None:
last = last.next
# append a copy of the other list
last.next = b.copy()
Для полноты, вот что вы пытались сделать:
def copy( cells ):
new = Cell(cells.value)
current = new
old = cells
while old.next is not None:
# copy the current cell
ccopy = Cell(old.value)
# add it
current.next = ccopy
# prepare for the next round
current = ccopy
old = old.next
return new
Я думаю, это помогает понять, как вы случайно перевернули свои ячейки: вы шли вперед по списку, но C = Cell(A,C)
ставитновая ячейка перед старым C
, так что строится новый список с конца.