题目
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2] 输出:[2,1]
示例 3:
输入:head = [] 输出:[]
完整代码:
class Solution {
public ListNode reverseList(ListNode head) {
if(head == null){
return null;
}
if(head.next == null){
return head;
}
ListNode newHead = null;
ListNode cur = head;
ListNode pre = null;
ListNode nextNode = cur.next;
while(cur != null){
//进入循环的 时候,需要先设定好nextNode的位置
nextNode = cur.next;
if(nextNode == null){
newHead = cur;
}
//核心
cur.next = pre;
//更新引用的位置
pre = cur;
cur = nextNode;
}
head = newHead;
return head;
}
}
代码分解:
这是最开始的
执行核心代码cur.next = pre后就变成了:
这样就完成了第一个反转,接着将这三个箭头往后移动更新位置,接着执行上面的操作,就变成了:
这样,就完成了第二个反转,以此类推,直到nextNode = null:
此时整个反转已完成,只需将head(也就是newHead)指向反转后的头节点: