C语言中如何实现单链表删除指定结点

实现单链表的删除指定结点,需要进行以下几个步骤:

  1. 首先判断需要删除的结点是不是链表的头结点,因为头结点是没有前驱结点的,所以需要特殊处理。

  2. 然后遍历链表查找需要删除的结点,查找时需要保存当前结点和前驱结点,以便完成删除操作。

  3. 找到需要删除的结点后,将前驱结点的next指针指向需要删除结点的下一个结点,从而完成删除操作。

以下是C语言实现单链表删除指定结点的完整代码:

#include <stdio.h>
#include <stdlib.h>

// 定义单链表结点结构体
typedef struct node {
    int data;
    struct node *next;
} Node;

// 删除指定结点函数
void delete_node(Node *head, int num) {
    Node *p = head->next;
    Node *last = head;
    // 遍历链表查找需要删除的结点
    while (p) {
        if (p->data == num) {
            last->next = p->next;
            free(p);
            printf("Delete the node with value %d\n", num);
            return;
        } else {
            last = p;
            p = p->next;
        }
    }
    printf("The node with value %d is not found\n", num);
}

int main() {
    Node *head = (Node *)malloc(sizeof(Node));
    head->next = NULL;
    // 创建链表
    for (int i = 5; i >= 1; i--) {
        Node *node = (Node *)malloc(sizeof(Node));
        node->data = i;
        node->next = head->next;
        head->next = node;
    }
    // 输出链表
    printf("Before deletion: ");
    Node *p = head->next;
    while (p) {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
    // 删除结点
    delete_node(head, 3);
    // 输出链表
    printf("After deletion: ");
    p = head->next;
    while (p) {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
    return 0;
}

以上是一个简单的单链表删除指定结点的例子。假设链表元素为1,2,3,4,5,需要删除值为3的结点。运行结果如下:

Before deletion: 1 2 3 4 5 
Delete the node with value 3
After deletion: 1 2 4 5 

可以看到,删除后链表中值为3的结点已经被成功删除。如果需要删除的结点不存在,则会提示“The node with value x is not found”。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言中如何实现单链表删除指定结点 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • win2008 R2服务器下修改MySQL 5.5数据库data目录的方法

    修改MySQL 5.5数据库data目录的方法需要按照以下步骤进行。 步骤1:备份原有数据 在修改数据目录之前,首先需要备份原有数据。可以使用mysqldump命令,将原有数据导出到其他文件或目录中。 示例: mysqldump -u root -p dbname > dbname.sql 以上命令中,-u 参数指定用户名,-p 参数后面跟着密码,db…

    C 2023年5月22日
    00
  • C++初识类和对象

    C++初识类和对象 什么是类和对象? 在C++中,类和对象是两个重要概念,类是一种用户自定义的数据类型,它是一组数据和操作数据的函数的集合,而对象是类的一个实例,是具体的、有形的存在。可以通过对象来使用类中的函数和数据。 如何定义一个类? 定义一个类,需要使用关键字class,语法如下: class 类名 { public: // 公共成员函数和成员变量 p…

    C 2023年5月22日
    00
  • C语言实现员工工资管理系统

    C语言实现员工工资管理系统 介绍 本文将详细讲解如何用C语言实现一个员工工资管理系统。该系统将能够实现对员工信息的存储、修改、删除以及工资发放等基本功能。我们将分步骤地讲解整个系统的实现,供初学者参考。 准备工作 在开始实现之前,需要安装C语言的编译器,比如GCC。此外,需要在系统上安装适合的文本编辑器。在本文中,我们使用的是Visual Studio Co…

    C 2023年5月23日
    00
  • phpcms缓存使用总结(memcached、eaccelerator、shm)

    PHPcms缓存使用总结 PHPcms 是一个基于 PHP 的开源 CMS(内容管理系统),支持各种数据库,并拥有完善的权限管理、缓存等功能。缓存是提高 PHP 程序性能的重要手段之一,下面我们就来详细讲解一下 PHPcms 缓存的使用总结。 1. 缓存类型介绍 PHPcms 有多种缓存类型可供选择,包括:memcached、eaccelerator、shm…

    C 2023年5月22日
    00
  • C语言实现空战游戏

    C语言实现空战游戏 简介 本文将介绍如何用C语言实现一个简单的空战游戏。通过本文,你将会学会如何使用C语言开发游戏,包括游戏物体的移动、碰撞检测、游戏关卡的设计等方面。 游戏框架 游戏框架指的是游戏的基本结构,由游戏引擎和游戏逻辑两部分构成。 游戏引擎用于处理游戏中的渲染、音效、输入等操作,我们可以使用一些现成的游戏引擎,例如SDL、Allegro等。这里我…

    C 2023年5月24日
    00
  • Oracle 19c RAC 手工建库的搭建过程

    下面就为您讲解“Oracle 19c RAC 手工建库的搭建过程”的完整攻略。 一、前置条件 在开始搭建 Oracle 19c RAC 环境之前,需要满足以下的前置条件: 服务器环境:必须具备至少两台运行 Oracle Linux 7.2 的服务器,它们必须在同一个局域网中,并且它们需要满足 Oracle 的硬件和软件要求。 网络环境:必须正确配置每个节点的…

    C 2023年5月22日
    00
  • NopCommerce架构分析之(三)EntityFramework数据库初试化及数据操作

    NopCommerce是一个基于ASP.NET Core的开源电子商务平台,其中使用了EntityFramework数据库进行数据操作。在这篇文章中,我们将详细讲解如何初始化NopCommerce的数据库,并且进行基本的数据操作。 EntityFramework数据库初始化 EntityFramework是一种ORM(Object-Relational Ma…

    C 2023年5月22日
    00
  • c++中堆栈及创建对象示例代码

    在C++中,堆栈就是一种特定的内存管理方法。通过堆栈,我们可以方便地动态分配内存空间。在C++代码中,堆栈可以使用stack类嵌套类型来定义。下面是一个简单的堆栈示例代码: #include <iostream> #include <stack> using namespace std; int main() { stack<i…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部