class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
class Solution {
public ListNode ReverseList(ListNode head) {
// 如果链表头节点为null或者下一个节点为null,无需反转直接返回
if(head == null || head.next == null) {
return head;
}
// 遍历节点游标
ListNode nowNode = head;
// 存储节点上一个节点
ListNode preNode = null;
while (nowNode != null) {
// 如果当前节点反转了即(nowNode.next = pre),那么当前节点原先的下一个节点就找不到了
// 因此先把当前节点的原先下一个节点存起来
ListNode tempNode = nowNode.next;
// 反转,让当前节点的next指向上一个节点preNode
nowNode.next = preNode;
// 为下一次循环做准备
// 当前节点反转完成后,要反转下一个节点,因此把上一个节点preNode指向本次循环的
// nowNode,本次循环的nowNode指向下一个节点tempNode
preNode = nowNode;
nowNode = tempNode;
}
// 反转完成 返回
return preNode;
}
}