面試題16:反轉(zhuǎn)鏈表

題目:

定義一個(gè)函數(shù),輸入一個(gè)鏈表的頭結(jié)點(diǎn),反轉(zhuǎn)該鏈表并輸出反轉(zhuǎn)后鏈表的頭結(jié)點(diǎn)。

思路:

定義三個(gè)指針,分別指向當(dāng)前遍歷的結(jié)點(diǎn)pNode、它的前一個(gè)結(jié)點(diǎn)pPrev、它的后一個(gè)結(jié)點(diǎn)pNext。
1)為避免鏈表斷開(kāi),每次遍歷,先保存后一個(gè)結(jié)點(diǎn)pNext。如果pNext==null,證明當(dāng)前結(jié)點(diǎn)pNode是最后一個(gè)結(jié)點(diǎn),即反轉(zhuǎn)鏈表的頭節(jié)點(diǎn)。
2)將當(dāng)前結(jié)點(diǎn)pNode的next指向它的前一個(gè)結(jié)點(diǎn)pPrev。
3)所有指針后移一位。

自述(僅自己理解):循環(huán)過(guò)程中,如果判斷條件不被判斷塊使用,同時(shí)僅在非判斷塊中起作用并且非判斷塊的代碼和判斷塊的代碼冗余,那么判斷條件無(wú)用。

  • 舉例:在while條件中,我使用了pNode != null的判斷條件,是因?yàn)樵跅l件塊中使用了ListNode pNext = pNode.next;
    如果我在while判斷使用pNode.next != null,那么條件塊沒(méi)有使用到該判斷,而且非條件塊還需要寫一段冗余代碼。證明此判斷條件不夠精準(zhǔn),還需提煉。

解答:

class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
public class Solution {
    public ListNode ReverseList(ListNode head) {
        ListNode pReverseHead = null;
        //三個(gè)指針:前面一位,當(dāng)前,下一個(gè)指針
        ListNode pPrev = null;
        ListNode pNode = head;
        while (pNode != null) {
            //保存第三個(gè)指針
            ListNode pNext = pNode.next;
            if (pNext == null) {
                pReverseHead = pNode;
            }
            //反轉(zhuǎn)指針指向
            pNode.next = pPrev;
            //向后移動(dòng)位置
            pPrev = pNode;
            pNode = pNext;
        }
        return pReverseHead;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 題目鏈接:面試題16 反轉(zhuǎn)鏈表 我的思路 反轉(zhuǎn)鏈表的基本思路就是把指向后驅(qū)的指針指向前驅(qū) 如果把指針的指向改變,無(wú)...
    賈雨村甄士隱閱讀 449評(píng)論 0 0
  • 題目:輸入一個(gè)鏈表,反轉(zhuǎn)鏈表后,輸出鏈表的所有元素。 思路1:用列表保存鏈表中的所有元素,然后將其進(jìn)行反轉(zhuǎn),新建鏈...
    minningl閱讀 268評(píng)論 0 0
  • 題目描述 輸入一個(gè)鏈表,反轉(zhuǎn)鏈表后,輸出鏈表的所有元素。 代碼實(shí)現(xiàn) 主要思路 1、首先我們需要3個(gè)結(jié)點(diǎn),第一個(gè)是當(dāng)...
    _minimal閱讀 233評(píng)論 0 0
  • 題目:定義一個(gè)函數(shù),輸入一個(gè)鏈表的頭結(jié)點(diǎn),反轉(zhuǎn)該鏈表并輸出反轉(zhuǎn)后鏈表的頭結(jié)點(diǎn)。 解法:
    qmss閱讀 219評(píng)論 0 0
  • 關(guān)系的建立可以高于一切,我們活在關(guān)系密織的世界里,無(wú)論你以什么樣的生活方式存在,都要建立一份牢不可破的關(guān)系...
    嵐升閱讀 247評(píng)論 1 11

友情鏈接更多精彩內(nèi)容