问题描述
我正在尝试在 python 中构造一个方法来反转从某个键开始到结尾的单链表。我知道如何反转整个链表,但我不会编码
def reverse(self,key)
- key 不是节点而是值。
解决方法
答案是首先初始化一个双向链表,但我们将在这个场景中模拟它的用例,并在我们遍历时创建一个临时的“前一个”节点。
class LinkedList:
def __init__(self):
self.head = None
self.tail = None
def insert(self,key):
node = Node(key)
if self.tail:
self.tail.next = node
self.tail = node
else:
self.tail = self.head = node
def reverse(self,key):
first = []
prev = None
current,self.head,self.tail = self.head,self.tail,self.head
while current:
if current.value == key:
first.append(current)
current.next,current,prev = prev,current.next,current
return first
def list_nodes(self):
res = []
current = self.head
while current:
res.append(current.value)
current = current.next
return res
class Node:
def __init__(self,value):
self.next = None
self.value = value
if __name__ == '__main__':
lst = LinkedList()
for i in range(100):
lst.insert(i)
res1 = lst.list_nodes()
rev = lst.reverse(55)
res2 = lst.list_nodes()
输出将是:
res1 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99]
res2 = [99,0]
rev = [<__main__.Node object at 0x00000271B63241C0>] # A Node object at some location
这将反转并搜索该键并将其返回到列表中,最小的索引是最接近的。