题目描述:
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
解题思路:
用另一个链表存放合并后的有序链表,直到两个链表均为空为止,将小的那个链接到新的链表后面。如果其中一个列表为空之后,用一个最大值代表空列表的值,这样while循环就会在两个列表都遍历结束后停止。
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
node=ListNode(0)
l3=node
while l1 or l2:
x=l1.val if l1 else 9999999999999999
y=l2.val if l2 else 9999999999999999
if x<=y:
node.next=ListNode(x)
if l1!=None:
l1=l1.next
else:
node.next=ListNode(y)
if l2!=None:
l2=l2.next
node=node.next
return l3.next
方法二:
当一个列表为空时,停止循环,然后在单独判断,将不为空的链表接到返回列表后面
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
node=ListNode(0)
l=node
while l1 and l2:
if l1.val<=l2.val:
x=ListNode(l1.val)
l1=l1.next
else:
x=ListNode(l2.val)
l2=l2.next
l.next=x
l=l.next
l.next=l1 if l1!=None else l2
return node.next
评论区答案:
不用创建新节点,增加两个指针分别表示l1,l2的当前位置
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
head=ListNode(0)
cur=head
cur1=l1
cur2=l2
while cur1 and cur2:
if cur1.val<=cur2.val:
cur.next=cur1
cur1=cur1.next
else:
cur.next=cur2
cur2=cur2.next
cur=cur.next
if cur1:
cur.next=cur1
if cur2:
cur.next=cur2
return head.next