我们已经在以前关于单链接列表的文章中讨论了“链接列表介绍”和“链接列表插入”。
让我们制定问题陈述以了解删除过程。给定一个“键”,删除该键在链表中的第一个匹配项。
要从链接列表中删除节点,我们需要执行以下步骤。
1)找到要删除的节点的上一个节点。
2)更改上一个节点的下一个节点。
3)待删除节点的可用内存。
由于链表的每个节点都是使用C语言中的malloc()动态分配的,因此我们需要调用free()来释放为要删除的节点分配的内存。
C ++
#include
usingnamespacestd;
classNode{
public:
intdata;
Node* next;
};
voidpush(Node** head_ref, intnew_data)
{
Node* new_node = newNode();
new_node->data = new_data;
new_node->next = (*head_ref);
(*head_ref) = new_node;
}
voiddeleteNode(Node** head_ref, intkey)
{
Node* temp = *head_ref;
Node* prev = NULL;
if(temp != NULL && temp->data == key)
{
*head_ref = temp->next;
delete temp;
return;
}
while(temp != NULL && temp->data != key)
{
prev = temp;
temp = temp->next;
}
if(temp == NULL)
return;
prev->next = temp->next;
delete temp;
}
voidprintList(Node* node)
{
while(node != NULL)
{
cout data
node = node->next;
}
}
intmain()
{
Node* head = NULL;
push(&head, 7);
push(&head, 1);
push(&head, 3);
push(&head, 2);
puts("Created Linked List: ");
printList(head);
deleteNode(&head, 1);
puts("\nLinked List after Deletion of 1: ");
printList(head);
return 0;
}
C语言
#include
#include
structNode
{
intdata;
structNode *next;
};
voidpush(structNode** head_ref, intnew_data)
{
structNode* new_node = (structNode*) malloc(sizeof(structNode));
new_node->data = new_data;
new_node->next = (*head_ref);
(*head_ref) = new_node;
}
voiddeleteNode(structNode **head_ref, intkey)
{
structNode* temp = *head_ref, *prev;
if(temp != NULL && temp->data == key)
{
*head_ref = temp->next;
free(temp);
return;
}
while(temp != NULL && temp->data != key)
{
prev = temp;
temp = temp->next;
}
if(temp == NULL) return;
prev->next = temp->next;
free(temp);
}
voidprintList(structNode *node)
{
while(node != NULL)
{
printf(" %d ", node->data);
node = node->next;
}
}
int main()
{
structNode* head = NULL;
push(&head, 7);
push(&head, 1);
push(&head, 3);
push(&head, 2);
puts("Created Linked List: ");
printList(head);
deleteNode(&head, 1);
puts("\nLinked List after Deletion of 1: ");
printList(head);
return0;
}
输出:
创建的链接列表: 2 3 1 7
删除后的链接列表: 2 3 7
希望对你有帮助~
领取专属 10元无门槛券
私享最新 技术干货