Прежде всего, вот функция, которая создает двойной связанный список из списка элементов.
Допустим, у нас есть список строковых элементов:
testList =['A lot', 'Very ^much', 'Try it', 'Nop']
Теперь, чтобы построить двусвязный список из testList
, мы делаем это следующим образом:
# Build node function
def getNode(data):
return [data, None, None]
# Build the doubly linked list
def construct_double_list(testList):
nxt, prvs = 1, 2
start, end = None, None
for line in testList:
next_node = getNode(line)
if start is not None:
end[nxt] = next_node
next_node[prvs] = end
end = next_node
else:
start = next_node
end = next_node
return start, end
Если вы запустите построитель функций, приведенный выше, двусвязный список (повторяемый в обоих направлениях) будет:
dll = dll = ['A lot', ['Very ^much', ['Try it', ['Nop', None, [...]], [...]], [...]], None]
Я уже делал это вчера, но сегодня утром я застрял, пытаясь решить проблему с курсором. Через некоторое время я получил его на работу только сейчас (наконец-то!). Вот функция, которая создает курсор в виде указателя на узел (содержащий текущую строку) и позицию в этой строке следующим образом:
def cursor():
cursor = (None, None)
start, end = construct_double_list(testList)
node = start
while node is not None:
line = node[0]
if '^' in line:
pointer1 = node
pointer2 = line.index('^')
node = node[1]
cursor = (pointer1, pointer2)
return cursor
Если вы печатаете функцию cursor()
выше:
print(cursor())
Вы получаете:
(['Very ^much', ['Try it', ['Nop', None, [...]], [...]], ['A lot', [...], None]], 5)
# Node 1 and string index 5
Теперь я могу создавать некоторые полезные функции для редактирования данных, изменения, добавления, удаления, замены элементов, замены символов в строковых элементах двусвязного списка и т. Д.