题目:给定单项链表的头指针和一个节点,定义一个函数在O(1)时间内删除该节点。
#include<iostream>
using namespace std;
struct ListNode {
int value;
ListNode* pNext;
};
void DeleteNode(ListNode** pHead, ListNode* pToBeDeleted) {
//头节点要设置为指针的指针类型
if (pHead==nullptr || pToBeDeleted==nullptr) {
return;
}
//要删除的节点不是尾节点(复制元素)
if (pToBeDeleted->pNext != nullptr) {
ListNode* next = pToBeDeleted->pNext;
pToBeDeleted->value = next->value;
pToBeDeleted->pNext = next->pNext;
delete next;
next = nullptr;
}
//链表只有一个头节点
else if (*pHead == pToBeDeleted) {
delete pToBeDeleted;
pToBeDeleted = nullptr;
*pHead = nullptr;
}
//眼删除的节点是链表最后一个节点且不是头节点
else {
ListNode* temp = *pHead;
while (temp->pNext != pToBeDeleted) {
temp = temp->pNext;
}
temp->pNext = nullptr;
delete pToBeDeleted;
pToBeDeleted = nullptr;
}
}
int main() {
DeleteNode(nullptr, nullptr);
return 0;
}