首先解体思路不要直接想代码怎么写,要先用语言构建出解题逻辑
反转主要的逻辑 有两块,抓住两块重点即可
下一个节点 (head.next) 的下一个节点会是当前节点 head
head.next.next = head;
链表的起始点的下一个节点变成null
head.next = null;
核心流程就这三步,其它一些具体的操作只是为了让这三个流程 连贯起来
- /*
- 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;
- }
- }