劍指offer—面試題18(一):刪除鏈表的節(jié)點(diǎn)

給定單向鏈表的頭指針和一個(gè)要?jiǎng)h除的節(jié)點(diǎn)的值,定義一個(gè)函數(shù)刪除該節(jié)點(diǎn)。返回刪除后的鏈表的頭節(jié)點(diǎn)。(此題對(duì)比原題有改動(dòng))

刪除鏈表節(jié)點(diǎn),首先就要想到單鏈表的特性,next指針指向下一個(gè)節(jié)點(diǎn),所以就考慮到雙指針,一個(gè)指針尋找要?jiǎng)h除的節(jié)點(diǎn),一個(gè)指向前一個(gè)指針之前的節(jié)點(diǎn),找到后可以將后一個(gè)指針的next 指向 前一個(gè)指針的next。代碼自然而然就有如下:

 func deleteNode(_ head: ListNode?, _ val: Int) -> ListNode? {
         guard head != nil else {
             return nil
         }
     
         if head!.val == val {
             return head?.next
         }
         var fast = head?.next
         var slow =  head
         
         while fast != nil {
             if fast!.val == val {
                 slow?.next = fast?.next
                 return head
             }else {
                 fast = fast?.next
                 slow = slow?.next
             }
         }
         
         return nil
     }

還有一種遞歸算法:

     func deleteNode(_ head: ListNode?, _ val: Int) -> ListNode? {
         guard head != nil else {
             return nil
         }
         if head!.val == val {
             return head?.next
         }
    
        head?.next = deleteNode(head?.next, val)
        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),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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