首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C/C+编程笔记:链接列表(链表)丨删除节点的操作源码

我们已经在以前关于单链接列表的文章中讨论了“链接列表介绍”和“链接列表插入”。

让我们制定问题陈述以了解删除过程。给定一个“键”,删除该键在链表中的第一个匹配项。

要从链接列表中删除节点,我们需要执行以下步骤。

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

希望对你有帮助~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201211A0GRD400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券