单向链表之删除节点

作者:carzy2024.02.18 18:26浏览量:4

简介:介绍如何在单向链表中删除指定节点,并给出C语言实现代码。

千帆应用开发平台“智能体Pro”全新上线 限时免费体验

面向慢思考场景,支持低代码配置的方式创建“智能体Pro”应用

立即体验

在单向链表中删除指定节点需要遵循以下步骤:

  1. 找到要删除的节点的前一个节点,记为pre。
  2. 将pre的next指针指向要删除的节点的下一个节点,实现逻辑上的删除。
  3. 释放要删除的节点的内存空间。

下面是一个简单的C语言实现代码:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. // 定义链表节点结构体
  4. struct ListNode {
  5. int val;
  6. struct ListNode *next;
  7. };
  8. // 删除指定值的节点
  9. void deleteNode(struct ListNode *head, int val) {
  10. struct ListNode *pre = NULL;
  11. struct ListNode *cur = head;
  12. while (cur != NULL && cur->val != val) {
  13. pre = cur;
  14. cur = cur->next;
  15. }
  16. if (cur == NULL) return; // 没有找到要删除的节点
  17. if (pre == NULL) { // 要删除的节点是头节点
  18. head = head->next;
  19. } else { // 要删除的节点不是头节点
  20. pre->next = cur->next;
  21. }
  22. free(cur); // 释放内存空间
  23. }

这段代码中,我们定义了一个名为deleteNode的函数,该函数接受一个链表头指针head和一个整数值val作为参数,用于删除链表中值为val的节点。在函数中,我们首先定义了两个指针precur,分别指向当前节点的前一个节点和当前节点。然后,我们使用一个循环来遍历链表,找到值为val的节点。如果找到了该节点,我们判断它是否是头节点,如果是头节点,则将头指针指向下一个节点;如果不是头节点,则将前一个节点的next指针指向当前节点的下一个节点,从而实现逻辑上的删除。最后,我们释放要删除的节点的内存空间。

需要注意的是,在实际应用中,我们还需要考虑一些边界条件和错误处理情况,比如链表为空、要删除的节点不存在等。此外,为了避免内存泄漏,我们需要确保在删除节点后释放其内存空间。

article bottom image

相关文章推荐

发表评论