// 面试题18(一):在O(1)时间删除链表结点
// 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
static void delete_node(std::shared_ptr<node_link<int>>& head,
std::shared_ptr<node_link<int>>& del)
{
// 要删除的结点不是尾结点
if(del->next != nullptr)
{
auto next = del->next;
del->data = next->data;
del->next = next->next;
}
// 链表只有一个结点,删除头结点(也是尾结点)
else if(head == del)
{
head = nullptr;
}
// 链表中有多个结点,删除尾结点
else
{
auto node = head;
while(node->next != del)
{
node = node->next;
}
node->next = nullptr;
}
}