要设计两个有序单链表的合并排序算法,可以采用迭代的方法来实现。下面是一个示例算法:
- class ListNode:
- def __init__(self, val=0, next=None):
- self.val = val
- self.next = next
- def mergeTwoLists(l1, l2):
- dummy = ListNode(0)
- current = dummy
- while l1 and l2:
- if l1.val < l2.val:
- current.next = l1
- l1 = l1.next
- else:
- current.next = l2
- l2 = l2.next
- current = current.next
- if l1:
- current.next = l1
- if l2:
- current.next = l2
- return dummy.next
复制代码
在这个算法中,我们使用了一个虚拟节点
dummy 和一个当前指针
current 来构建新的有序链表。然后我们依次比较两个链表的节点值,将较小的节点添加到新链表中,并将指针向后移动。
最后,如果其中一个链表遍历完了,我们将另一个链表剩余的部分直接添加到新链表的末尾。
您可以调用这个函数来合并两个有序单链表,如下所示:
- # 创建链表1
- l1 = ListNode(1)
- l1.next = ListNode(3)
- l1.next.next = ListNode(5)
- # 创建链表2
- l2 = ListNode(2)
- l2.next = ListNode(4)
- l2.next.next = ListNode(6)
- # 合并排序
- merged = mergeTwoLists(l1, l2)
- # 打印合并后的链表
- while merged:
- print(merged.val)
- merged = merged.next
复制代码
这将输出合并后的有序链表的节点值。
希望对您有帮助!如果您有更多问题,请随时提问。