题目
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

https://leetcode.cn/problems/reverse-linked-list/description/
思路
头插法

原地反转方法(空间O(1))

code
java
//头插法
class Solution {
public ListNode reverseList(ListNode head) {
if(head== null) return null;
ListNode cur=head;
ListNode dummy= new ListNode(0, null);//反转链表的dummy
ListNode oldNode=null;
while(cur!=null){
// 创建新节点,值为cur.val,next指向之前创建的节点
ListNode newNode = new ListNode(cur.val, oldNode);
// 让虚拟头节点指向最新创建的节点
dummy.next = newNode;
// 更新oldNode为当前新节点
oldNode = newNode;
// 移动原链表指针
cur = cur.next;
}
return dummy.next;
}
}
java
//原地反转
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode cur = head;
while(cur != null) {
ListNode next = cur.next; // 保存下一个节点(防止链表断裂)
cur.next = prev; // 反转:当前节点指向前一个节点
prev = cur; // prev移动到当前节点
cur = next; // cur移动到下一个节点
}
return prev;
}