算法学习第一天

引言:

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

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


所学视频教程:

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


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

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

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


怎样刻意练习?

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

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

3.代码实现

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


五步解法

算法学习第一天_第1张图片

 


链表反转

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

例:输入: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)

你可能感兴趣的:(算法学习,学习,算法,leetcode,链表)