JZ15 -鏈表反轉(JS)


題目描述:鏈表反轉


輸入一個鏈表,反轉鏈表後,輸出新鏈表的表頭。


題目解析:


牛客解題,很完美!

題目所給的是單鏈表,想了一下反轉後的樣子:最後一個結點指向倒數第二個,倒數第二個指向倒數第三個,…,第二個指向第一個,第一個指向null;
知道了反轉後各個結點指向哪之後,就需要開始調整每個結點的next指針。
這就需要把結點挨個從鏈表上摘下來,做調整;
這個調整過程需要兩個指針輔助:pre記錄其前一個結點位置,好讓該結點的next指針指向前一個結點,但是在指向前一個結點前需要用一個指針p記錄後一個結點地址,避免結點丟失。
例子:
以head結點爲例步驟如下:
1.反轉後head是指向null,所以未反轉的時候其前一個結點應該是null,初始化pre指針爲null;
2.用p指針記錄head的下一個結點head.next;
3.從鏈表上摘下head,即讓head.next指向pre;
4.此時已完成head結點的摘取及與前一個節點的連接,則我們需要操作下一個結點:故需移動pre和head,讓pre指向head,head指向下一個節點。
重複這四個操作直到head走完原鏈表,指向null時,循環結束,返回pre。

/*function ListNode(x){
    this.val = x;
    this.next = null;
}*/
function ReverseList(pHead)
{
    //初始化pre指針,用於記錄當前結點的前一個結點地址
    var pre = null;
    //初始化p指針,用於記錄當前結點的下一個結點地址
    var p = null;
    //pHead指向null時,循環終止。
    while(pHead != null){
        //先用p指針記錄當前結點的下一個結點地址。
        p = pHead.next;
        //讓被當前結點與鏈表斷開並指向前一個結點pre
        pHead.next = pre;
        //pre指針指向當前結點
        pre = pHead;
        //head指向p(保存着原鏈表中head的下一個結點地址)
        pHead = p;
    }
    return pre;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章