给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
解题思路
关键在于指针移动的顺序 与 节点之间绑定的先后顺序。
- 首先判断链表是否为空
- 先获取头结点的下一个节点的引用
- 再更改头结点指向的下一个节点的引用
- 再移动 preNode 指针
- 最后移动头结点的引用指针
- 返回 preNode 节点
注意:循环判断的条件始终是与当前节点相关。
不需要单独为第一个节点的next引用赋值为 null 是因为在第一轮循环的时候已经将preNode赋值为空了
代码如下
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null){
return null;
}
ListNode preNode = null;
ListNode curNode = head;
ListNode nextNode =null;
while (curNode != null){
nextNode = curNode.next;
curNode.next = preNode;
preNode = curNode;
curNode = nextNode;
}
return preNode;
}
}