代码仓库:Github | Leetcode solutions @doubleZ0108 from Peking University.
- 解法1(T23% S46%): 非常经典的链表题,首先同时循环两个链表,将数值较小的那个数创建新节点链接在结果链表的尾部,二者整体扫描完再将更长的链表剩下的一截直接串到结果链表尾部即可,推荐开始时创建一个哑节点,方便整体代码书写
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
if not l1 and not l2:
return None
elif not l1:
return l2
elif not l2:
return l1
result_li = ListNode()
head = result_li
while l1 and l2:
if l1.val < l2.val:
fresh_node = ListNode(l1.val, None)
l1 = l1.next
else:
fresh_node = ListNode(l2.val, None)
l2 = l2.next
result_li.next = fresh_node
result_li = result_li.next
while l1:
fresh_node = ListNode(l1.val, None)
l1 = l1.next
result_li.next = fresh_node
result_li = result_li.next
while l2:
fresh_node = ListNode(l2.val, None)
l2 = l2.next
result_li.next = fresh_node
result_li = result_li.next
return head.next
var mergeTwoLists = function(list1, list2) {
var res = new ListNode();
var head = res;
while (list1 && list2) {
if (list1.val < list2.val) {
res.next = new ListNode(list1.val);
list1 = list1.next;
} else {
res.next = new ListNode(list2.val);
list2 = list2.next;
}
res = res.next;
}
if (list1) {
res.next = list1;
}
if (list2) {
res.next = list2;
}
return head.next;
};