面试题——O(1)时间复杂度删除链表节点

本文通过详细讲解如何在O(1)时间复杂度内删除链表节点,深入剖析了相关算法实现和测试过程,为面试者提供了关键的解题思路。
摘要由CSDN通过智能技术生成

(注意:由于本次代码中有较为详细的题目描述与解题分析,此处就不在重复说明)

代码实现及分析:

#include<iostream>
using namespace std;
#include<stdio.h>
#include<stdlib.h>
/
//题目一、在O(1)时间内删除链表节点
//    给定单向链表的头指针和一个节点指针,定义一个函数在O(1)
//    时间内删除该节点。链表节点与函数的定义如下
/

struct ListNode{
    int data;
    ListNode* next;
};

ListNode* create(int x){
    ListNode* new_node = (ListNode*)malloc(sizeof(ListNode));
    new_node->data = x;
    new_node->next = NULL;
    return new_node;
}

void DeleteNode(ListNode** head,ListNode* ToBeDeleted){
    if(head == NULL || (*head)==NULL || ToBeDeleted == NULL){
        return;
    }
    ListNode* cur;
    //对于链表中节点的删除,最早想到的也许是先进行查询,如果查找到
    //再进行删除操作,但是这种方法的时间复杂度为O(n),不满足题中要
    //求。故此,我们可以进行删除待删除节点的下一个节点,将待删除结
    //点的值进行修改,就达到了删除指定元素的目的。但是 此种方法需要
    //考虑带删除元素是否在链表中,如果需要进行判断,呢么时
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值