题目:给定一个单向链表的头指针和一个结点指针,实现一个函数在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>