0
点赞
收藏
分享

微信扫一扫

21. 合并两个有序链表 python实现

莞尔小迷糊 2022-04-07 阅读 101

21. 合并两个有序链表

合并有序链表

一、递归

递归详解
在这里插入图片描述

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
        # 进行其中一个链表是否为空的判断
        if list1 is None:
            return list2
        if list2 is None:
            return list1
		# 进行值的比较
        if list1.val <= list2.val:
            list1.next = self.mergeTwoLists(list1.next,list2)
            return list1
        else:
            list2.next = self.mergeTwoLists(list1,list2.next)
            return list2

二、迭代 – 哨兵节点

1、哨兵节点

哨兵节点的作用是方便得到最后的链表,即一个虚拟的头节点。

2、迭代的过程

在这里插入图片描述

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
        
        # 设置哨兵节点,将较小的节点连接到这个哨兵节点,最后返回prehead.next即可。
        prehead = ListNode(-1)
        
        # 设置一个进行移动的指针pre,进行取list1和list2中的最小值使用
        pre = prehead
        
        # 当list1和list2均不空的时候
        while list1 and list2:
            if list1.val <= list2.val:
                
                # 执行list1和list2中的最小值
                pre.next = list1
                list1 = list1.next
                
            else:
                pre.next = list2
                list2 = list2.next
                
            pre = pre.next
                
        # 当一开始其中一个链表为空的时候,或者一直遍历直到其中一个短的链表为空的时候,直接把非空的另外一个链表添加到pre.next
        if list1 is None:
            pre.next = list2
        else:
            pre.next = list1
                
                
        return prehead.next
举报

相关推荐

0 条评论