# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param pHead1 ListNode类 
# @param pHead2 ListNode类 
# @return ListNode类
#
class Solution:
    def Merge1(self , pHead1: ListNode, pHead2: ListNode) -> ListNode:
        # write code here
        newHead=ListNode(0)
        cur=newHead
        cur1=pHead1
        cur2=pHead2
        if not cur1:
            return pHead2
        if not cur2:
            return pHead1

        while cur1 and cur2:
            if cur1.val<=cur2.val:
                cur.next=cur1
                cur1=cur1.next 
                #if cur1:
                    #print("cur1",cur.val,cur1.val)
            
            else:
                cur.next=cur2
               
                cur2=cur2.next
                #if cur2:
                    #print("cur2",cur2.val)
            cur=cur.next
        if not cur2:
                cur.next=cur1
        else :
                cur.next=cur2
        #print(newHead.next.val)
        return newHead.next

    """
    递归写法

    1.如果一个链表为空返回另外一个链表
    2. 如果pHead1 节点比pHead2 ,下一个节点应该是pHead1 ,应该return pHead1 
     在ruturn 之前递归 pHead1.next 和pHead2 合并的头结点
     如果 pHead1 节点比pHead2 大, 下一个节点应该是pHead2, 应该return pHead2 ,在return 之前,指定
     pHead2 的下一个节点应该是pHead1和pHead2.next 合并的头结点
    """
    def Merge(self , pHead1: ListNode, pHead2: ListNode) -> ListNode:
        # 1. 其中一个为空返回另外一个
        if not pHead1:
            return pHead2
        if not pHead2:
            return pHead1
        # 两个链表都不为空
        if pHead1.val<=pHead2.val:
            pHead1.next=self.Merge(pHead1.next,pHead2)
            return pHead1 

        else :
            pHead2.next =self.Merge(pHead1,pHead2.next )
            return pHead2