题目:
给定单链表,删除链表中指定等于指定元素的节点。
分析:
注意点:
1、头节点为空;
2、头节点为需要删除的节点
3、删除释放内存
代码:
/**
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
ListNode* removeElements(ListNode* head, int target) {
if (head == NULL)
return head;
if (head != NULL && head->val == target)
head = head->next;
ListNode* prev = head;
while (prev->next != NULL) {
if (prev->next->val == target)
prev->next = prev->next->next;
else
prev = prev->next;
}
return head;
}
当然,上面的代码可能内存泄漏,因为删除了的节点内存没有释放掉
修改后的代码:
ListNode* removeElements(ListNode* head, int target) {
if (head == NULL)
return NULL;
if (head != NULL && head->val == target)
head = head->next;
ListNode* prev = head;
while (prev->next != NULL) {
if (prev->next->val == target){
ListNode* p = prev->next;
prev->next = prev->next->next;
free(p);
} else
prev = prev->next;
}
return head;
}