删除单链表结点
时间: 2023-08-24 19:08:15 浏览: 215
删除单链表中的一个结点,需要先找到要删除的结点的前一个结点,然后修改前一个结点的指针,使其指向要删除结点的下一个结点。
具体步骤如下:
1. 判断要删除的结点是否是头结点,如果是,直接将头指针指向下一个结点,然后释放该结点的内存空间。
2. 遍历单链表,找到要删除的结点的前一个结点,假设为p。
3. 将p的next指针指向要删除结点的下一个结点,然后释放要删除结点的内存空间。
以下是示例代码:
```c++
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
void deleteNode(ListNode* head, int val) {
if(head == NULL) return;
if(head->val == val) {
ListNode* tmp = head;
head = head->next;
delete tmp;
return;
}
ListNode* pre = head;
ListNode* cur = head->next;
while(cur != NULL) {
if(cur->val == val) {
pre->next = cur->next;
delete cur;
return;
}
pre = cur;
cur = cur->next;
}
}
```
其中,head为单链表头指针,val为要删除的结点的值。在函数内部,首先判断头结点是否为要删除的结点,如果是,直接删除;否则遍历单链表,找到要删除的结点的前一个结点,然后删除要删除结点。