Leetcode 21. 合并两个有序链表 ----python

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

示例:

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

解题思路
先开辟一个头节点的空间(这里先假设头节点值为0,方便后面尾插法)
然后比较了l1和l2指向的节点,取出更小的那一个节点,然后指针往后移动一个位置。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码实现

# 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
        """
        newHead = ListNode(0) #假设为头节点
        nH = newHead
        while(l1 and l2):
            if(l1.val < l2.val):
                temp = l1.next # 保留l1的后续节点,防止丢失
                l1.next = None
                newHead.next = l1
                newHead = newHead.next
                l1 = temp #l1往后移一个位置
            else:
                temp = l2.next # 保留l2的后续节点,防止丢失
                l2.next = None
                newHead.next = l2
                newHead = newHead.next
                l2 = temp
        if(l1 == None):
            newHead.next = l2
        if(l2 == None):
            newHead.next = l1
        return nH.next

    def printLink(self,root):
        r = root
        while(r):
            print(r.val)
            r = r.next

root1 = ListNode(1)
n2 = ListNode(4)
n3 = ListNode(6)
root1.next = n2
n2.next = n3

root2 = ListNode(0)
r2 = ListNode(5)
r3 = ListNode(7)
root2.next = r2
r2.next = r3

s = Solution()
result = s.mergeTwoLists(root1,root2)
s.printLink(result)

猜你喜欢

转载自blog.csdn.net/u013075024/article/details/92122423