011-力扣刷题21--合并两个有序链表

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

示例:

输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def mergeTwoLists(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        curr = damy = ListNode(0) #虚拟节点,再返回的时候返回的是这个虚拟节点的下一位节点

        while l1 and l2: #对两个链表进行遍历
            if l1.val <l2.val:
                curr.next = l1  #第一次取出的就是l1的头结点
                l1 = l1.next  #在次取就是下一个节点next
            else:
                curr.next=l2 #进入else说明现在的两个节点的值是l2.val是比较大的因此让curr的节点的下一个链接上l2取出的来的节点
                l2=l2.next  #同时让l2指向下一个节点
            curr = curr.next #更新current, current原来是在root节点,current.next是第一个节点, 再次循环的时候current.next指向的就是第二个节点
        #但是上面用的是and进行链接,那么下面要将没有链接的剩下的l1或者是l2进行链接
        curr.next = l1 or l2

        return damy.next  #返回的是我们设定的虚拟起始点的下一个节点也就是我们的第一个节点