反轉一個單鏈表
示例:
輸入: 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;
}