节点位置:
1.有且只有一个
2.在尾部
3.在中间;
核心思想:
删除一个节点 = 用该节点后一个节点覆盖该节点的值+改变指针;
class ListNode {
public:
int value;
ListNode * next;
};
void DeleteNode(ListNode** pListHead, ListNode* pToDeleted) {
if (pListHead == NULL || pToDeleted == NULL) {
return;
}
if (pToDeleted->next != NULL) {
ListNode* temp = pToDeleted->next;
pToDeleted->value = pToDeleted->next->value;
pToDeleted->next = pToDeleted->next->next;
delete temp;
temp = NULL;
}
else if (pToDeleted == *pListHead) {
delete pToDeleted;
pToDeleted = NULL;
*pListHead = NULL;
}
else {
//尾节点要从头遍历一边找到尾节点的前一个节点
ListNode* temp = *pListHead;
while (temp->next != pToDeleted) {
temp = temp->next;
}
temp->next = NULL;
delete pToDeleted;
pToDeleted = NULL;
}
}