要求将算法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]

题目信息

题号:8236
题型:简答题
知识点:Python
难度:普通