反轉一個單鏈表

反轉一個單鏈表

示例:

輸入: 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;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章