美文网首页剑指offer算法系列——Swift版本
剑指offer—面试题18(一):删除链表的节点

剑指offer—面试题18(一):删除链表的节点

作者: FY_Chao | 来源:发表于2020-12-29 14:54 被阅读0次

    给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。(此题对比原题有改动)

    删除链表节点,首先就要想到单链表的特性,next指针指向下一个节点,所以就考虑到双指针,一个指针寻找要删除的节点,一个指向前一个指针之前的节点,找到后可以将后一个指针的next 指向 前一个指针的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
         }
    

    相关文章

      网友评论

        本文标题:剑指offer—面试题18(一):删除链表的节点

        本文链接:https://www.haomeiwen.com/subject/wevfoktx.html