[英]How to recursively add a node to a linked list?
I created a function that inserts a node to its correct position.我创建了一个 function,它将一个节点插入到其正确的 position。
For example:例如:
root = converts_list_to_linked_list([4, 7, 9, 14]) #I have a linked list: 4->7->9->14 root = converts_list_to_linked_list([4, 7, 9, 14]) #我有一个链表:4->7->9->14
The Function: Function:
insert_ordered(root, 12)插入排序(根,12)
returns a linked list of "4->7->9->12->14->None"返回“4->7->9->12->14->None”的链表
class LN:
def __init__(self, value):
self.value = value
self.next = None
def insert_ordered(root, data):
node = LN(data)
if root == None:
return node
else:
if root.value > data:
node.next = root
return node
else:
temp, prev = root, None
while temp.next and temp.value <= data:
prev = temp
temp = temp.next
if temp.next == None and temp.value <= data:
temp.next = node
else:
node.next = prev.next
prev.next = node
return root
Is there any way to solve this problem recursively?有没有办法递归地解决这个问题? I can't grasp the idea on how too.
我也无法理解如何做。
Try this:尝试这个:
class LN:
def __init__(self, value, node=None):
self.value = value
self.next = node
def insert_ordered(root, data):
if root == None or root.value > data:
return LN(data, root)
root.next = insert_ordered(root.next, data)
return root
If you want to insert in descending order change
root.value > data
toroot.value < data
如果要按降序插入,请将
root.value > data
更改为root.value < data
The following uses an auxiliary function to recursively insert into the list:下面使用一个辅助的 function 递归地插入到列表中:
class LN:
def __init__(self, value):
self.value = value
self.next = None
def insert_ordered(self, data):
node = LN(data)
return self.insert_ordered_aux(node)
def insert_ordered_aux(self,node):
if self.value >= node.value: # add node before current node
node.next = self
return node
elif self.next: # do the recursion
self.next = self.next.insert_ordered_aux(node)
return self
else: # add node at end of list
self.next = node
return self
#test:
root = LN(4)
root = root.insert_ordered(9)
root = root.insert_ordered(14)
root = root.insert_ordered(6)
root = root.insert_ordered(-2)
root = root.insert_ordered(12)
def print_list(node):
if (node):
print(node.value)
print_list(node.next)
print_list(root)
How are you using it, and is your pasted code's indentation correct?你是如何使用它的,你粘贴的代码的缩进是否正确?
After some indentation adjustments, this is how i use it, and what i get:经过一些缩进调整,这就是我使用它的方式,以及我得到的:
class LN:
def __init__(self, value):
self.value = value
self.next = None
def insert_ordered(root, data):
node = LN(data)
if root == None:
return node
else:
if root.value > data:
node.next = root
return node
else:
temp, prev = root, None
while temp.next and temp.value <= data:
prev = temp
temp = temp.next
if temp.next == None and temp.value <= data:
temp.next = node
else:
node.next = prev.next
prev.next = node
return root
#Use:
a1 = LN(1)
a1.next = a2 = LN(5)
a2.next = a3 = LN(10)
a3.next = a4 = LN(15)
root = a1
#Insert tests
root = root.insert_ordered(13)
root = root.insert_ordered(12)
root = root.insert_ordered(15)
root = root.insert_ordered(-5)
root = root.insert_ordered(17)
t = root
while(t):
print(str(t.value) + " ")
t = t.next
Output: -5 1 5 10 12 13 15 15 17 Output:-5 1 5 10 12 13 15 15 17
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.