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日

相关文章

  • 关于C语言函数strstr()的分析以及实现

    关于C语言函数strstr()的分析以及实现的完整攻略,可以分为以下几个部分: 1. strstr()函数的简介 strstr()函数的作用是在一个字符串中查找另一个字符串的出现位置,并返回该子字符串的指针。其原型如下: char *strstr(const char *str1, const char *str2); 其中,str1是要查找的字符串,str…

    C 2023年5月23日
    00
  • C语言用指针支持队列

    为了使用指针来支持队列,我们需要定义一个结构体来表示队列。该结构体至少需要包括两个指针分别指向队列的头和尾,以及队列的大小。以下是一个示例: struct queue { int *data; // 存储队列元素的数据 int front; // 队列头 int rear; // 队列尾 int size; // 队列大小 }; 接下来,我们可以使用以下函数…

    C 2023年5月9日
    00
  • 论C++的lambda是函数还是对象

    论C++的lambda是函数还是对象,这是一个较为复杂的话题。事实上,lambda既可以看作函数,也可以看作对象。下面我会从lambda的定义、基本语法、底层实现等方面进行详细讲解。 Lambda的定义 在C++11标准之前,我们只能使用函数指针定义一个可调用对象。而C++11引入了lambda表达式,使得我们可以更方便地定义可调用对象。 lambda表达式…

    C 2023年5月22日
    00
  • 基于C语言实现简易扫雷游戏

    基于C语言实现简易扫雷游戏攻略 介绍 扫雷游戏是一款经典的单人益智游戏,最早由微软公司开发,并已成为Windows操作系统默认自带的游戏之一。在扫雷游戏中,玩家需要找出所有雷所在的方格,并将它们标记出来,但不能点到任何一枚雷。本文将介绍如何基于C语言实现简易扫雷游戏。 准备工作 在开始编写游戏程序之前,需要了解以下几点: 游戏界面:使用C语言和控制台编写扫雷…

    C 2023年5月23日
    00
  • 如何在抖音卖课程?在抖音上卖课程方式汇总

    如何在抖音卖课程? 要在抖音上卖课程,以下步骤值得一试: 步骤一:申请店铺账号 想要在抖音上卖课程,首先需要注册店铺账号并认证。 1.进入抖店(抖音商家后台),根据提示注册店铺账号。 2.填写相关信息,提交认证材料。 步骤二:准备课程内容 在抖音上卖课程需要有足够的课程内容,要为用户提供有价值的学习体验。 1.根据目标用户和市场需求,确定课程内容、形式等。 …

    C 2023年5月22日
    00
  • 使用C语言访问51单片机中存储器的核心代码

    让我来为您详细讲解如何使用C语言访问51单片机中存储器的核心代码的完整攻略。 1. 了解51单片机存储器 在51单片机中,存储器分为RAM和ROM两种类型,其中RAM用于临时存储数据,而ROM则用于存储程序及常量等固化数据。访问51单片机中的存储器需要使用C语言提供的指针功能,通过指向特定地址的指针进行读写操作。 2. 访问RAM 访问RAM很简单,只需要使…

    C 2023年5月24日
    00
  • C++顺序表实现图书管理系统

    C++顺序表实现图书管理系统攻略 介绍 图书管理系统是一种常见的应用系统,其核心功能是对图书的信息进行管理和查询。顺序表是一种简单的数据结构,可用于实现图书管理系统的存储和操作。本攻略将详细介绍如何使用C++语言实现图书管理系统。 构建数据结构 首先,我们需要定义一个数据结构来存储图书信息,这里我们使用一个结构体来表示一本图书: struct Book { …

    C 2023年5月30日
    00
  • C语言中的状态机设计深入讲解

    C语言中的状态机设计深入讲解 什么是状态机 状态机(State Machine),也称状态自动机,是一种抽象的数学模型,是一种对事物变化过程进行描述的工具。状态机可分为两类:有限状态机和无限状态机。 有限状态机(FSM, Finite State Machine)是一种计算模型。有限状态机由有限个状态及在这些状态之间的转移和动作组成,其中一个状态是我们所关心…

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