class Node:
def __init__(self, id, schedule, name):
self.id = id
self.schedule = schedule
self.name = name
self.next = None
def __repr__(self) -> str:
return f"{self.schedule}->{self.name}"
class LinkedList:
def __init__(self):
self.size = 0
self.head = None
self.last = None
def get(self, index):
if(index < 0 or index > self.size):
raise("超限")
p = self.head
for i in range(index):
p = p.next
return p
def insert(self, id, schedule, name, index):
if(index < 0 or index > self.size):
raise("超限")
node = Node(id, schedule, name)
if self.size == 0:
self.head = node
self.last = node
elif index == 0:
node.next = self.head
self.head = node
elif self.size == index:
self.last.next = node
self.last = node
else:
prev_node = self.get(index-1)
node.next = prev_node.next
prev_node.next = node
self.size += 1
def remove(self, index):
if(index < 0 or index > self.size):
raise("超限")
if index == 0:
remove_node = self.head
self.head = self.head.next
elif index == self.size-1:
prev_node = self.get(index - 1)
remove_node = prev_node.next
prev_node.next = None
self.last = prev_node
else:
prev_node = self.get(index - 1)
next_node = prev_node.next.next
remove_node = prev_node.next
prev_node.next = next_node
self.size -= 1
return remove_node
def update_index(self,name,index):
if not 0<= index < self.size:
return 'Error'
if index == 0:
self.head.name = name
else:
p = self.head
while index:
p = p.next
index-=1
p.name = name
def output(self):
p = self.head
while p is not None:
print(str(p.id) + '->' + str(p.schedule)+'->' + str(p.name))
p = p.next
# 这个函数是用来交换数据的,大体思路是
# 先取出select 位置的数据, 然后取出此位置的数据
# 然后将这个数据插入到target index的位置 , 此时完成数据的重排序
# 然后进行数据的赋值操作
def exchangeData(self, select, target):
selectnode = self.get(select)
self.remove(select)
self.insert(selectnode.id, selectnode.schedule,
selectnode.name, target)
p = self.head
print(p)
for i in range(select+1):
p = p.next
print(p)
if i ==target:
self.update_index(p.name,i)
elif i>target and i<select:
self.update_index(p.name,i)
elif i==select:
self.update_index(selectnode.name,i)
link = LinkedList()
link.insert(1, 1, "test1", 0)
link.insert(2, 2, "test2", 1)
link.insert(3, 3, "test3", 2)
link.insert(4, 4, "test4", 3)
link.insert(5, 5, "test5", 4)
link.exchangeData(4,0)
link.output()
需求是将5节点移动到3节点,然后链表更改后的name值要保持未改变之前的,涉及到链表数据的更改,图已经描述的很清楚了,就是将next节点的值赋值给当前节点