引言:
生命中有一个很奇妙的逻辑,如果你真的过好今天,明天也还不错。
那么就让我们开始今天的算法学习吧!
所学视频教程:
【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;
}
力扣类型题: