算法题目跟连系列之“手把手刷链表”

第一道
题目:https://leetcode.cn/problems/partition-list/description/
86 Partition List
这个题解决的时候,无非就是把链表中小于X的元素摘出来形成一个链表,同时也把大于等于X的元素摘出来形成另外一个链表。最后把这两个链表合并。这个地方就牵扯到一个dummy节点的技巧
代码如下

class Solution:
    def partition(self, head: Optional[ListNode], x: int) -> Optional[ListNode]:
        dummy1 = ListNode(-1)
        dummy2 = ListNode(-1)
        p1 = dummy1
        p2 = dummy2
        while head:
            if head.val < x:
                p1.next = ListNode(head.val)
                p1 = p1.next
            else:
                p2.next = ListNode(head.val)
                p2 = p2.next
            head = head.next
        p1.next = dummy2.next
        return dummy1.next

第二道:
https://leetcode.cn/problems/merge-k-sorted-lists/description/
23. Merge k Sorted Lists
将多个链表合并成一个链表,按照升序排列,这个地方用到了一个常用的python库:heapq,无非就是取出元素之后加入到堆中,再依次弹出

import heapq

class Solution:
    def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:
        heap = []
        for l in lists:
            head = l
            while head:
                heapq.heappush(heap, (head.val))
                head = head.next
        dummy = ListNode(-1)
        head = dummy
        while heap:
            val = heapq.heappop(heap)
            head.next = ListNode(val)
            head = head.next
        head.next = None
        return dummy.next

第三道:
https://leetcode.cn/problems/add-two-numbers/
2. Add Two Numbers
这个题目对于python来说还是相对比较加单的,python的数据类型转换更为方便一些

class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        head = l1
        sum1 = 0
        cnt0 = 0
        while head:
            sum1 += head.val * (10 ** cnt0)
            cnt0 += 1
            head = head.next
        head = l2
        sum2 = 0
        cnt1 = 0
        while head:
            sum2 += head.val * (10 ** cnt1)
            cnt1 += 1 
            head = head.next
        sum = sum1 + sum2
        reversed = str(sum)[::-1]
        dummy = ListNode(-1)
        p = dummy
        for i in reversed:
            p.next = ListNode(int(i))
            p = p.next
        return dummy.next

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值