合并两个有序链表

中英题面

  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

 

posted @ 2018-04-05 14:36  Efve  阅读(219)  评论(0编辑  收藏  举报