力扣——算法入门计划第十天

简介: 力扣(LeetCode)是领扣网络旗下专注于程序员技术成长和企业技术人才服务的品牌。源自美国硅谷,力扣为全球程序员提供了专业的IT技术职业化提升平台,有效帮助程序员实现快速进步和长期成长。 此外,力扣(LeetCode)致力于解决程序员技术评估、培训、职业匹配的痛点,逐步引领互联网技术求职和招聘迈向专业化。

 目录

🍕题目

🍔方法一:递归

🍟代码

🍔方法二:迭代

🍟代码

🍕题目

🍔方法一:迭代解法

🍔方法二:递归


🍕题目

21. 合并两个有序链表

image.gifimage.png

我们可以注意到它插入的小到大,有方向的

🍔方法一:递归

递归时候,同时需要考虑边界情况。

如果 l1 或者 l2 一开始就是空链表 ,那么没有任何操作需要合并,所以我们只需要返回非空链表。

否则,我们要判断 l1 和 l2 哪一个链表的头节点的值更小,然后递归地决定下一个添加到结果里的节点。

而如果两个链表有一个为空,递归结束。

我看网上这样评价递归,看起来什么都没做,其实都做完了

🍟代码

# 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
        elif list2 is None:
            return list1
        elif list1.val < list2.val:
            list1.next = self.mergeTwoLists(list1.next,list2)
            return list1
        else:
            list2.next = self.mergeTwoLists(list1,list2.next)
            return list2

image.gif

image.png

🍔方法二:迭代

首先,我们设定一个哑节点 prehead ,这可以在最后让我们比较容易地返回合并后的链表。

我们需要一个 prev 指针,我们需要做的是调整它的 next 指针。

然后,我们重复以下过程,直到 l1 或者 l2 指向了 null :

如果 l1 当前节点的值小于等于 l2 ,我们就把 l1 当前的节点接在 prev 节点的后面同时将 l1 指针往后移一位。

否则,我们对 l2 做同样的操作。不管我们将哪一个元素接在了后面,我们都需要把 prev 向后移一位。

在循环终止的时候, l1 和 l2 至多有一个是非空的。这意味着我们只需要简单地将非空链表接在合并链表的后面,并返回合并链表即可。

🍟代码

class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        prehead = ListNode(-1)
        prev = prehead
        while l1 and l2:
            if l1.val <= l2.val:
                prev.next = l1
                l1 = l1.next
            else:
                prev.next = l2
                l2 = l2.next            
            prev = prev.next
        # 合并后 l1 和 l2 最多只有一个还未被合并完,我们直接将链表末尾指向未合并完的链表即可
        prev.next = l1 if l1 is not None else l2
        return prehead.next

image.gif

image.png

🍕题目

206. 反转链表

image.png

🍔方法一:迭代解法

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        prev,curr = None,head
        while curr is not None:
            next = curr.next 
            curr.next = prev
            prev = curr
            curr = next
        return prev

image.gif

1.next  = curr.next   ;     如图 先存起来下一个要移动的对象

image.png

2.curr.next = prev  达成反转的目的  ;如图

image.png

  3.                                    

创建24 指向 null

image.png

4.

prev = curr;                         prev和curr指针向后移动一位

curr = next;

image.png

🍔方法二:递归

def reverseList(self, head: ListNode) -> ListNode:
    if head is None or head.next is None:
        return head
    p = self.reverseList(head.next)
    head.next.next = head
    head.next = None
    return p

image.gif

递归 = 递 + 归

递推

if head is None or head.next is None:
        return head
image.gif

归的是反转

head的 next 的next 指向直接就OK了

image.png

head.next.next = head
image.gif

目录
打赏
0
0
1
0
91
分享
相关文章
【二叉树遍历入门:从中序遍历到层序与右视图】【LeetCode 热题100】94:二叉树的中序遍历、102:二叉树的层序遍历、199:二叉树的右视图(详细解析)(Go语言版)
本文详细解析了二叉树的三种经典遍历方式:中序遍历(94题)、层序遍历(102题)和右视图(199题)。通过递归与迭代实现中序遍历,深入理解深度优先搜索(DFS);借助队列完成层序遍历和右视图,掌握广度优先搜索(BFS)。文章对比DFS与BFS的思维方式,总结不同遍历的应用场景,为后续构造树结构奠定基础。
113 10
强化学习:时间差分(TD)(SARSA算法和Q-Learning算法)(看不懂算我输专栏)——手把手教你入门强化学习(六)
本文介绍了时间差分法(TD)中的两种经典算法:SARSA和Q-Learning。二者均为无模型强化学习方法,通过与环境交互估算动作价值函数。SARSA是On-Policy算法,采用ε-greedy策略进行动作选择和评估;而Q-Learning为Off-Policy算法,评估时选取下一状态中估值最大的动作。相比动态规划和蒙特卡洛方法,TD算法结合了自举更新与样本更新的优势,实现边行动边学习。文章通过生动的例子解释了两者的差异,并提供了伪代码帮助理解。
171 2
【算法】——双指针算法合集(力扣)
移动零,复写零,快乐数,盛最多水的容器,有效三角形的个数,和为s的两个数(查找总价格为目标值的两个商品 ),三数之和,四数之和
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
103 4
|
7月前
|
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
64 2
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
86 0
【链表】算法题(二) ----- 力扣/牛客
【链表】算法题(二) ----- 力扣/牛客
【链表】算法题(一) ----- 力扣 / 牛客
【链表】算法题(一) ----- 力扣 / 牛客

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等