算法学习第一天

这篇博客介绍了如何通过递归和迭代两种方式来反转链表,详细解析了2022年小破站上的高质量力扣算法视频讲解。内容涵盖了数据结构如数组、链表、栈等,以及排序、搜索等算法。通过刻意练习,如理解题意、多解一题、代码实现和测试,来提升算法能力。文中还给出了力扣上的相关反转链表题目作为实践练习。
摘要由CSDN通过智能技术生成

引言:

生命中有一个很奇妙的逻辑,如果你真的过好今天,明天也还不错。

那么就让我们开始今天的算法学习吧!


所学视频教程:

【2022年小破站高质量力扣算法视频讲解 | 0基础入门指南 | 高效率刷题思路 | 附力扣算法刷题笔记&代码】 https://www.bilibili.com/video/BV1dY4y1w7oe?p=2&share_source=copy_web&vd_source=c1510692b9cb6018bf78570791d3ee02


首先先了解一下数据结构和算法中常考的知识点吧~

数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Tire树

算法:递归、排序、二分查表、搜素、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配法


怎样刻意练习?

1.读题 分清楚题目到底要你做什么

2.多解 一个题目尽可能想到多种解法

3.代码实现

4.运行测试用例 构造边界数据来检测程序运行正常


五步解法

 


链表反转

将单链表的链接顺序反转过来

例:输入:1->2->3->4->5

        输出:5->4->3->2->1

        使用两种方式解题

递归:先解决小问题再解决大问题(统筹全局)

只需每个元素都执行 curr.next.next = curr curr.next = null 两个步骤即可
为了保证链不断,必须从最后一个元素开始

head.next.next=head          head.next=null

从后往前走

public static ListNode recursion(ListNode head){
    if(head==null || head.next==null){
        return head;
    }
    ListNode new_head=recursion(head.next);
    head.next.next=head;
    head.next=null;
    return new_head;
}

 迭代:一步一步状态改变

从前往后遍历链表,将当前节点的 next 指向上一个节点,因此需要一个变量存储上一个节点 prev ,当前 节点处理完需要寻找下一个节点,因此需要一个变量保存当前节点curr ,处理完后要将当前节点赋值给 prev,并将 next 指针赋值给 curr ,因此需要一个变量提前保存下一个节点的指针 next

  使用while循环,不知链表长度

public static ListNode iterate(ListNode head){
    ListNode prev=null,next;
    ListNode curr=head;
    while(curr!=null){
        next=curr.next;
        curr.next==prev;
        prev=curr;
        curr=next;
        }
    }
    return prev;
}

    

力扣类型题:

206. 反转链表 - 力扣(LeetCode)

92. 反转链表 II - 力扣(LeetCode)

344. 反转字符串 - 力扣(LeetCode)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值