Swift.在0(1)时间删除链表节点

cubegao 2015-07-07 PM 409℃ 0条
题目描述:在 O(1) 时间内删除链表节点
import Foundation

class For13Solution {
    func deleteNode(_ head: ListNode?,_ pDeleted: ListNode?) -> ListNode? {
        
        var p = head
        
        if p == nil || pDeleted == nil {
            return p
        }
        
        if pDeleted?.next != nil {
            //删除的不是尾节点
            pDeleted?.val = (pDeleted?.next?.val)!
            pDeleted?.next = pDeleted?.next?.next
        }else if p === pDeleted {
            //删除的是头结点,只有一个节点
            p = nil
        } else {
            //删除的是尾节点
            let s = p
            while p?.next !== pDeleted {
                p = p?.next
            }
            p?.next = nil
            p = s
        }
        
        return p
    }
}

算法思想:① 如果该节点不是尾节点,那么可以直接将下一个节点的值赋给该节点,然后令该节点指向下下个节点,再删除下一个节点,时间复杂度为 O(1)。
② 否则,就需要先遍历链表,找到节点的前一个节点,然后让前一个节点指向 null,时间复杂度为 O(N)。

github地址:https://github.com/cubegao/LeetCode

标签: 算法

非特殊说明,本博所有文章均为博主原创。

评论啦~