要求将算法7-13设计为3. 4. 1节定义的带头结点
要求将算法7-13设计为3. 4. 1节定义的带头结点单链表LinkedList类的方法。
12.设计算法,将一个整数的质因数进行分解并按递减顺序生成一个有序单链表。如输入2100,则生成的单链表中的元素从头开始依次为(7, 5, 5, 3, 2, 2)
答案
class LNode: def __init__(self, data=None): self.data = data self.next = None class LinkedList: def __init__(self): self.head = LNode() # 头结点 def append(self, val): """尾部追加结点""" new_node = LNode(val) p = self.head while p.next: p = p.next p.next = new_node def reverse(self): """反转单链表(带头结点)""" pre = None cur = self.head.next while cur: nxt = cur.next cur.next = pre pre = cur cur = nxt self.head.next = pre def print_list(self): res = [] p = self.head.next while p: res.append(p.data) p = p.next print(res) def prime_factor_link(n): link = LinkedList() i = 2 temp = n while temp > 1: while temp % i == 0: link.append(i) temp = temp // i i += 1 link.reverse() # 反转,变为递减 return link # 测试 lst = prime_factor_link(2100) lst.print_list() # [7, 5, 5, 3, 2, 2]