021-leetcode算法实现之合并两个有序链表-merge-two-sorted-lists-python&golang实现
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:
输入:l1 = [], l2 = []
输出:[]
示例 3:
输入:l1 = [], l2 = [0]
输出:[0]
提示:
两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按 非递减顺序 排列
python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
# iteration实现
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
prevhead = ListNode(-1) # 哨兵节点,方便返回节点
prev = prevhead
# 遍历两链表,如有None则跳出循环
while l1 and l2:
if l1.val <= l2.val: # l1的节点值小,prev指针指向l1,l1节点右移
prev.next = l1
l1 = l1.next
else: # l2的节点值小,prev指针指向l2,l2节点右移
prev.next = l2
l2 = l2.next
prev = prev.next
# prev的next指针指向非空链表
prev.next = l1 if l1 is not None else l2
return prevhead.next
if __name__ == "__main__":
# 1->3->8
l1_ = [1,3,8]
l1 = ListNode()
for item in l1_:
l1.next = ListNode(-1)
l1 = l1.next
# 0->2->3->9->11
l2_ = [0,2,3,9,11]
l2 = ListNode()
for item in l2_:
l2.next = ListNode(-1)
l2 = l2.next