合并两个有序链表
中英题面
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
合并两个已排序的链表,并将其作为一个新列表返回。新列表应该通过拼接前两个列表的节点来完成。
Example:
Input: 1->2->4, 1->3->4
Output: 1->1->2->3->4->4
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
题目解读
归并排序的思想。
算法
初始状态两个指针分别指向两个链表头,比较两个指针所指数值,将较小的一个放入第三个链表并将该指针后移,若其中一个指针指向链表尾,则直接将另一链表剩余部分加入第三链表并返回,算法时间复杂度 O(N)。
代码
1 # Definition for singly-linked list.
2 # class ListNode:
3 # def __init__(self, x):
4 # self.val = x
5 # self.next = None
6
7 class Solution:
8 def mergeTwoLists(self, l1, l2):
9 """
10 :type l1: ListNode
11 :type l2: ListNode
12 :rtype: ListNode
13 """
14 l = ListNode(0)
15 i = l1
16 j = l2
17 k = l
18 while (i and j):
19 if (i.val < j.val):
20 k.next = i
21 i = i.next
22 else:
23 k.next = j
24 j = j.next
25 k = k.next
26 k.next = i if (i) else j
27 return l.next