Python中检查链表是否已排序(迭代和递归)
假设我们有一个链表,我们需要定义两个函数来检查该链表是否按非递增顺序排序。其中一个方法将以迭代方式工作,另一个方法将以递归方式工作。
因此,如果输入类似于 L = [15, 13, 8, 6, 4, 2],则输出将为 True。
为了解决这个问题,我们将遵循以下步骤:
- 定义一个函数 solve_iter()。这将接收头节点。
- 如果头节点为空,则
- 返回 True
- 当头节点的下一个节点不为空时,执行以下操作:
- current := head
- 如果 current 的值 <= current 的下一个节点的值,则
- 返回 False
- head := head 的下一个节点
- 返回 True
- 定义一个函数 solve_rec()。这将接收头节点。
- 如果头节点为空或头节点的下一个节点为空,则
- 返回 True
- 如果(head的值 > head的下一个节点的值)为真 且 solve_rec(head的下一个节点) 为真,则返回true;否则返回false。
示例
让我们看下面的实现来更好地理解:
class ListNode: def __init__(self, data, next = None): self.val = data self.next = next def make_list(elements): head = ListNode(elements[0]) for element in elements[1:]: ptr = head while ptr.next: ptr = ptr.next ptr.next = ListNode(element) return head def solve_iter(head): if head == None: return True while head.next != None: current = head if current.val <= current.next.val: return False head = head.next return True def solve_rec(head): if head == None or head.next == None: return True return head.val > head.next.val and solve_rec(head.next) L = make_list([15, 13, 8, 6, 4, 2]) print(solve_iter(L)) print(solve_rec(L))
输入
[15, 13, 8, 6, 4, 2]
输出
True True
广告