📅  最后修改于: 2023-12-03 15:11:15.839000             🧑  作者: Mango
本篇介绍的是一段 C++ 程序,用于在链表中删除指定的节点。该程序结合了链表的常用操作,如节点的访问、修改、删除等。
首先,我们需要定义链表的节点结构体:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
其中,val
表示节点的值,next
表示指向下一个节点的指针。
接下来,我们实现删除节点的函数:
ListNode* deleteNode(ListNode* head, int val) {
if (!head) return head;
if (head->val == val) return head->next;
ListNode* prev = head;
ListNode* curr = head->next;
while (curr && curr->val != val) {
prev = curr;
curr = curr->next;
}
if (curr) {
prev->next = curr->next;
delete curr;
}
return head;
}
该函数的输入参数为链表头节点 head
和需要删除的节点值 val
。程序首先特判链表为空和要删除的节点为头节点的情况,若满足任一条件,则直接返回链表头。否则,程序使用一对指针 prev
和 curr
同时遍历链表,直到找到要删除的节点或遍历完整个链表。若找到要删除的节点,则使用 prev
指针连接其前后节点,并释放 curr
节点内存。最后,函数返回链表头节点。
下面是一个使用示例,展示了如何创建链表、调用删除节点函数并输出结果:
int main() {
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
head->next->next->next = new ListNode(4);
int val = 3;
head = deleteNode(head, val);
while (head) {
cout << head->val << " ";
head = head->next;
}
cout << endl;
return 0;
}
本示例中,我们创建了一个包含 4 个节点的链表 [1, 2, 3, 4]
,并选取值为 3 的节点进行删除。程序输出结果为 1 2 4
,即删除成功。