给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
输入:1 2 3 4 5
输出:5 4 3 2 1
可以简单的画一个草图:如下:
需要得到这样的结果:
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null||head.next==null){
return head;
}
ListNode cur = head; //cur代表最初的头节点,不用移动,只修改cur.next的指针即可
ListNode curPer =null; curPer代表每一个 在最初的头节点的后面的那个节点,对这个节点进行移动
while (cur.next!=null) { //进入循环时,判断cur.next是否为空
//找到第二个节点,保存
curPer=cur.next;
//将最初的头节点的next修改为第二个节点的next(也就是第三个节点的地址),暂时将第二个节点从最初节点的后面删除
cur.next=curPer.next;
//头插,将第二个节点的next改为最初节点的地址,随后将head重新赋值为第二个节点
curPer.next=head;
head=curPer;
}
return head;
}
}
这个代码执行步骤如下所示: