1 背景
- ? ? ??基础算法题
- ? ? ? 各种算法题是为了锻炼算法思维,算法题要不断反复刷,每次都会有不通的领悟??
2 解体思路
? ? 首先解体思路不要直接想代码怎么写,要先用语言构建出解题逻辑
? 2.1 解体逻辑
? ? ? 反转主要的逻辑 有两块,抓住两块重点即可
?2.1.1 反转表达
? ? ? ? 下一个节点? ?(head.next)? ? 的下一个节点会是当前节点? head
? ? ? ? ?head.next.next = head;
? 2.1.2? 链表表头发生的变化?
? ? ? ? 链表的起始点的下一个节点变成null?
? ? ? ? ?head.next = null;
??
2.2?? 流程图
? ?
? ?核心流程就这三步,其它一些具体的操作只是为了让这三个流程 连贯起来
?
3? 编码
??
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
//定义循环中的当前节点
ListNode curr = null;
//定义上一个节点,也是最后反转后链表的表头
ListNode pre = null;
//定义下一个节点
ListNode next = null;
//链表循环的基本形式
while(head !=null){
//记录当前节点值
curr = head;
//记录下一个节点值
next = head.next;
//核心流程开始,链表的表头的下一个节点为null
head.next = pre;
//head值为下一个节点,目的是保证循环继续
head = next;
//核心逻辑,保证 下一个节点的下一个节点为 当前节点
pre = curr;
}
return pre;
}
}
|