反转一个单链表
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
分析过程:
1) 定义curNext变量,找到反转后链表的头节点reverseHead
此处不能通过cur节点,因为倒数第二个节点反转后cur.next不是最后一个节点
curNext变量从始至终都指向cur的下一个节点
2) cue.next=prev (此时prev=null 第一个节点的next指向prev,变为尾节点)
3) prev=cur (prev向前走一步 此处不能使用prev=prev.next; 此时prev初始值为null,prev.next会出现空指针异常)
4) cur =curNext (cur向前走一步 此处不能使用cur=cur.next; 此时cur.next已经指向prev)
public ListNode reverseList(ListNode head) {
ListNode reverseHead =null;//反转后的新头节点
ListNode cur=head;
ListNode prev=null;
while(cur!=null){
ListNode curNext=cur.next;
if(curNext==null){
reverseHead =cur; //找到反转后的新节点
}
cur.next=prev; //反转操作
prev=cur; //prev向前走一步 此处不能使用prev=prev.next; 此时prev初始值为null,prev.next会出现空指针异常
cur=curNext; //cur向前走一步 此处不能使用cur=cur.next; 此时cur.next已经指向prev
}
return reverseHead;
}