(注意:由于本次代码中有较为详细的题目描述与解题分析,此处就不在重复说明)
代码实现及分析:
#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),不满足题中要
//求。故此,我们可以进行删除待删除节点的下一个节点,将待删除结
//点的值进行修改,就达到了删除指定元素的目的。但是 此种方法需要
//考虑带删除元素是否在链表中,如果需要进行判断,呢么时