来源
https://leetcode-cn.com/problems/merge-two-sorted-lists/
题目:
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
代码:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
res = ListNode()
# 在这里需要进行赋值,原因为:下列数据需要被重新赋值,所以会只打印最后一条
node = res
while l1 and l2:
if l1.val < l2.val:
# 如果一链 小于 二链
node.next, l1 = l1, l1.next
else:
# 如果二链 小于 一链
node.next, l2 = l2, l2.next
# 将链延长
node = node.next
if l1:
# 将多余的部分复制
node.next = l1
else:
# 将多余的部分复制
node.next = l2
return res.next
最优代码:
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
r_list = []
while l1 and l2:
if l1.val < l2.val:
r_list.append(l1.val)
l1 = l1.next
else:
r_list.append(l2.val)
l2 = l2.next
for rest_l in [l1, l2]:
while rest_l:
r_list.append(rest_l.val)
rest_l = rest_l.next
if r_list:
r_list_node = ListNode(val=r_list[0])
temp_node = r_list_node
for ind in range(1, len(r_list)):
num = r_list[ind]
temp_node.next = ListNode(val=num)
temp_node = temp_node.next
return r_list_node
else:
return None
网友评论