Swift-O(1)时间删除链表的节点

题目:给定一个单向链表的头指针和一个结点指针,实现一个函数在o(1)时间删除该结点。

    func printList(head:ListNode?) {
        var node:ListNode? = head
        while node != nil {
            print("\(node!.value!)")
            node = node?.next
        }
    }
    
    func createList(head:inout ListNode?,data:Int) {
        let node:ListNode = ListNode()
        node.value = data
        if head == nil {
            node.next = nil
        } else {
            head?.next = node
        }
        head = node
    }
    
    func deleteNode(head:inout ListNode?,toBeDeleted:inout ListNode?) {
        var node:ListNode?
        guard let headNode = head,let deleteNode = toBeDeleted else {
            return
        }
        
        if head == toBeDeleted { //删除是表头
            node = headNode.next!
            head = node
        } else {
            if deleteNode.next == nil { // 删除的最后节点是尾节点
                node = headNode
                while node?.next != toBeDeleted {
                    node = node?.next
                }
                node?.next = nil
            } else {
                node = deleteNode.next!
                deleteNode.value = node?.value
                deleteNode.next = node?.next
            }
        }
    }

测试代码:


var listManager:ListNodeManager = ListNodeManager()
var head:ListNode?
var firstNode:ListNode?
var deleteNode:ListNode?
listManager.createList(head: &head, data: 11)
firstNode = head

listManager.createList(head: &head, data: 12)
listManager.createList(head: &head, data: 13)
deleteNode = head
listManager.createList(head: &head, data: 14)
listManager.createList(head: &head, data: 15)

listManager.deleteNode(head: &firstNode, toBeDeleted: &deleteNode)
print("FlyElephant")
listManager.printList(head: firstNode)`</code></pre>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容