这是我参与更文挑战的第25天,活动详情查看: 更文挑战
题目描述
反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
leetcode-cn.com/problems/re…
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
输入:head = []
输出:[]
标签
递归
解题分析
1. 迭代
直接上讲解。
这道题应该是面试里的送分题了吧。。
简单讲一下逻辑。
1 => 2 => 3
反转链表怎么搞?
1. 首先储存每个元素的next,prev。
2. 然后将每个元素的next 等于上一个存储的prev。
就很简单,我们手写看一下。
遍历中 ,遍历元素为 1
首先记录 当前元素的 next = 1 => 2,
接着把当前元素的next = null, 因为第一个元素反转后 变成了倒数第一个所以没有下一个
继续遍历, 遍历元素 2
同样的,记录当前元素的next = 2 => 3,
然后把当前元素的 next 等于上一个存储的prev,
.....
直到遍历到最后一个结束。
这道题讲道理真的死背都要死背下来,你去面试的时候,万一面试官看你顺眼,觉得你是天命之子,立马给你一道反转链表作为送分题,岂不是起了作用!!!
来人上代码!!!!!
/**
* Definition for singly-linked list.
* class ListNode {
* val: number
* next: ListNode | null
* constructor(val?: number, next?: ListNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
* }
*/
function reverseList(head: ListNode | null): ListNode | null {
// 记录上一个元素的next
let prev = null
// head则是第一个
let cur = head
while (cur) { // 当遍历中的当前元素存在
// 记录当前元素的 next
const next = cur.next
// 把当前元素的 next 改为 上一个
cur.next = prev
// 继续保存
prev = cur
cur = next
}
return prev
};
最后
从今天开始不鸽,每天一道算法题并发布文章,首先想要解决的题组为Top100
,第十三道题目打完收工!!