今天做 LeetCode LeetCode 解题报告-206.反转链表,难度为 Easy。
一. 题目要求
反转一个单向链表
例子
Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL
二. 解题思路 & 代码
解题的关键也是理清楚每次反转的节点指针变化,每次反转涉及到三个指针,如图
- 当前节点:
- Pre 节点
- next 节点
针对三个节点的反转过程为:
- 1 . 记录当前节点的 next 节点
ListNode next = head.next;
- 2 . 反转链表,将当前节点的 next 指向 preNode
node.next = preNode;
- 3 . 将 preNode 指向 node, node 移动到 next 节点,进行下一次遍历
preNode = node;
node = next;
具体实现代码如下:
class Solution {
public ListNode reverseList(ListNode head) {
if (head == null) {
return head;
}
if (head.next == null) {
return head;
}
ListNode preNode = null;
while (head != null) {
ListNode next = head.next;
head.next = preNode;
preNode = head;
if (next == null) {
break;
}
head = next;
}
return head;
}
}
三. 解题后记
这道题和之前的 LeetCode 解题报告-24.两两交换链表中的节点 相比算是比较简单的题目,解题的关键还是先画个图,理清楚反转过程中各个指针的变化,在把代码写出来。
老铁,都看到这了来一波点赞、评论、关注三连可好
我是 AhriJ邹同学,前后端、小程序、DevOps 都搞的炸栈工程师。博客持续更新,如果觉得写的不错,欢迎来一波老铁三连,不好的话也欢迎指正,互相学习,共同进步。