总体思想: 1.首先定义一个l3空节点,两个链表当前表头的元素谁小将谁插入到l3后面 2.开始判断两个链表是否有为空的情况。 3.需要注意定义p1、p2链表的后驱元素信息,这里我使用l1、l2代表p1和p2的后驱元素信息,因为将当前最小元素加入到l3链表之后 会出现无法前进的现象,且需要将l3当前元素置空。 4.因为定义了后驱元素,所以在遍历时需要注意,若l1为空时,则不能前进。 5.最后比完了大小可能会出现链表长度不同的情况。 # class ListNode: # def __init__(self, x): # self.val = x # self.next = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param pHead1 ListNode类 # @param pHead2 ListNode类 # @return ListNode类 # class Solution: def Merge(self , pHead1: ListNode, pHead2: ListNode) -> ListNode: if pHead1==None: return pHead2 if pHead2==None: return pHead1 test = ListNode(0) l3 = test #定义一个第空节点 l1 = pHead1.next #采取谁小谁插入到l3后面的策略,但需要保留下一次的节点信息,所以定义一个l1和l2用于储存节点信息 l2 = pHead2.next while pHead1 and pHead2: if pHead1.val<pHead2.val: l3.next = pHead1 #将当前小的元素链接到l3节点处 pHead1.next = None #将当前链表制空,因为此时pHead1对应的节点为当前l3链表中的最后一个节点 l3 = l3.next #l3向后移动,方便下次继续链接当前最小的元素 pHead1 = l1 #l1为记忆节点,直接将其赋值给pHead1 if l1!=None: #害怕出现l1为None的情况,故在不为none时进行后移动 l1 = l1.next else: #同理 l3.next = pHead2 pHead2.next= None l3 = l3.next pHead2 = l2 if l2!=None: l2 = l2.next if pHead1==None: #若出现有链表长度不同的情况,p1为空,则有可能p2不为空,同理p2为空 l3.next = pHead2 #p1有可能不为,同理有可能都为空 return test.next if pHead2==None: l3.next = pHead1 return test.next else: return test.next # write code here