在單鏈表和雙鏈表中刪除倒數(shù)第k個(gè)節(jié)點(diǎn)

【題目】
分別實(shí)現(xiàn)兩個(gè)函數(shù),一個(gè)可以刪除單鏈表中倒數(shù)第k個(gè)節(jié)點(diǎn),另一個(gè)可以刪除雙鏈表中倒數(shù)第k個(gè)節(jié)點(diǎn)。
【解析】
先來分析單鏈表,如果鏈表為空或者k值小于1,這種情況下參數(shù)是無效的,直接返回結(jié)果。
讓鏈表從頭開始走向尾,每移動(dòng)一步,就讓k的值減1.
例如:1->2->3,k=4,鏈表根本不存在倒數(shù)第4個(gè)節(jié)點(diǎn)。走到的節(jié)點(diǎn):1->2->3;K值變化為:3 2 1
例如2: 1->2->3,k=3,鏈表倒數(shù)第三個(gè)節(jié)點(diǎn)是1.走到的節(jié)點(diǎn):1->2->3;k值變化為:2 1 0
例如3: 1->2->3,k=2,鏈表倒數(shù)第二個(gè)節(jié)點(diǎn)是2節(jié)點(diǎn),走到的節(jié)點(diǎn):1->2->3;k值變化:1 0 -1
以上三種情況可知:讓鏈表從頭開始走向尾,每移動(dòng)一步,就讓k值減1,當(dāng)鏈表走到尾部時(shí),如果k>0,說明不用調(diào)整鏈表,因?yàn)殒湵砀緵]有倒數(shù)第k個(gè)節(jié)點(diǎn)。
如果k=0,說明鏈表倒數(shù)第k個(gè)節(jié)點(diǎn)就是頭節(jié)點(diǎn),此時(shí)直接返回head.next,也就是原鏈表的第二個(gè)節(jié)點(diǎn),讓第二個(gè)節(jié)點(diǎn)作為鏈表的頭返回即可,相當(dāng)于刪除頭節(jié)點(diǎn),接下來,說明一下k<0該如何處理:
先明確一點(diǎn),如果刪除的節(jié)點(diǎn)是頭節(jié)點(diǎn)之后的某一個(gè)節(jié)點(diǎn),需要找到要?jiǎng)h除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)。例如:1->2->3如果刪除的是2,則需要找到節(jié)點(diǎn)1,然后把節(jié)點(diǎn)1鏈接到節(jié)點(diǎn)3上(1->3),此時(shí)達(dá)到刪除節(jié)點(diǎn)2的目的。
如果k<0如何找到要?jiǎng)h除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)?方法如下:
1.重新從頭節(jié)點(diǎn)開始走,每移動(dòng)一步,就讓k的值加1.
2.當(dāng)k=0時(shí),移動(dòng)停止,移動(dòng)到的節(jié)點(diǎn)就是要?jiǎng)h除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)。
【代碼實(shí)現(xiàn)】

public static Node removeLastKthNode(Node head,int lastKth){
        //參數(shù)判斷
        if (head == null || lastKth <1) {
            return head;
        }
        Node cur = head;
        while (cur != null) {
            lastKth--;
            cur = cur.next;
        }
        if (lastKth == 0) {
            head = head.next;
        }
        if (lastKth < 0) {
            cur = head;
            while (++lastKth != 0) {
                cur = cur.next;
            }
            cur.next = cur.next.next;
        }
        return head;
    }
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 搞懂單鏈表常見面試題 Hello 繼上次的 搞懂基本排序算法,這個(gè)一星期,我總結(jié)了,我所學(xué)習(xí)和思考的單鏈表基礎(chǔ)知識(shí)...
    醒著的碼者閱讀 4,729評(píng)論 1 45
  • 再過兩個(gè)星期好多課就結(jié)了,可是ps有一個(gè)大作業(yè)沒有做完,軟件課的作業(yè)基本都是遲交,花了三天加一個(gè)通宵研究兩張圖片畫...
    獨(dú)行向日葵閱讀 382評(píng)論 1 1
  • 高中的我們看課外書度過,才會(huì)遇到現(xiàn)在的他們。 我總共對(duì)你講過你所有的缺點(diǎn),你是不是機(jī)器人,從來沒討厭過我。 我覺得...
    櫻花舟閱讀 177評(píng)論 0 0
  • 概要 根據(jù)禪意花園中的一個(gè)實(shí)例,學(xué)習(xí)前端的基礎(chǔ)知識(shí) 內(nèi)容
    一曲廣陵散閱讀 765評(píng)論 0 0
  • 運(yùn)行步驟: 客戶端發(fā)出請(qǐng)求,請(qǐng)求訪問jsp文件 Web 服務(wù)器識(shí)別出這是一個(gè)對(duì) JSP 網(wǎng)頁的請(qǐng)求,并且將該請(qǐng)求傳...
    XueFengPlay閱讀 192評(píng)論 0 0

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