C语言基础(二十三)

news2024/9/21 2:46:39

在C语言中,修改链表中的数据涉及遍历链表以找到要修改的元素,然后更新该元素的值。链表是一种动态数据结构,它由一系列节点组成,每个节点包含数据部分和指向列表中下一个节点的指针(双向链表,还会有指向前一个节点的指针)。

测试代码1:

#include "date.h"
#include <stdio.h>  
#include <stdlib.h>  
  
// 定义链表节点结构体  
typedef struct Node {  
    int data;  
    struct Node* next;  
} Node;  
  
// 创建新节点  
Node* createNode(int data) {  
    Node* newNode = (Node*)malloc(sizeof(Node));  
    if (newNode == NULL) {  
        printf("Memory allocation failed\n");  
        exit(1); // 或进行其他错误处理  
    }  
    newNode->data = data;  
    newNode->next = NULL;  
    return newNode;  
}  
  
// 向链表末尾添加节点  
void appendNode(Node** head, int data) {  
    Node* newNode = createNode(data);  
    if (*head == NULL) {  
        *head = newNode;  
    } else {  
        Node* current = *head;  
        while (current->next != NULL) {  
            current = current->next;  
        }  
        current->next = newNode;  
    }  
}  
  
// 删除链表中的节点(按值删除)  
bool deleteNode(Node** head, int key) {  
    Node* temp = *head, *prev = NULL;  
  
    // 如果头节点就是要删除的节点  
    if (temp != NULL && temp->data == key) {  
        *head = temp->next; // 改变头指针  
        free(temp); // 释放旧的头节点内存  
        return true;  
    }  
  
    // 查找要删除的节点  
    while (temp != NULL && temp->data != key) {  
        prev = temp;  
        temp = temp->next;  
    }  
  
    // 如果key不存在于链表中  
    if (temp == NULL) return false;  
  
    // 从链表中删除节点  
    prev->next = temp->next;  
    free(temp); // 释放内存  
    return true;  
}  
  
// 修改链表节点的数据  
bool updateNode(Node* head, int oldKey, int newKey) {  
    Node* current = head;  
    while (current != NULL) {  
        if (current->data == oldKey) {  
            current->data = newKey;  
            return true;  
        }  
        current = current->next;  
    }  
    return false; // 如果没有找到,返回false  
}  
  
// 查找链表中的节点(按值查找)  
Node* findNode(Node* head, int key) {  
    Node* current = head;  
    while (current != NULL) {  
        if (current->data == key) {  
            return current;  
        }  
        current = current->next;  
    }  
    return NULL; // 如果没有找到,返回NULL  
}  
  
// 打印链表  
void printList(Node* head) {  
    Node* current = head;  
    while (current != NULL) {  
        printf("%d -> ", current->data);  
        current = current->next;  
    }  
    printf("NULL\n");  
}  

//  释放链表内存  
void freeList(Node* head) {  
    Node* temp;  
    while (head != NULL) {  
        temp = head;  
        head = head->next; // 移动到下一个节点  
        free(temp); // 释放当前节点的内存  
    }  
}
int main() {  
    int time = getTime();
    Node* head = NULL;  
  
    // 添加节点  
    appendNode(&head, 10);  
    appendNode(&head, 2);  
    appendNode(&head, 8); 
	appendNode(&head, 35); 
	appendNode(&head, 9);  
    printf("Initial list: ");  
    printList(head);  
  
    // 修改节点  
    if (updateNode(head, 2, 20)) {  
        printf("Updated list: ");  
        printList(head);  
    }  
  
    // 查找节点  
    Node* foundNode = findNode(head, 20);  
    if (foundNode != NULL) {  
        printf("Found node with value: %d\n", foundNode->data);  
    }  
  
    // 删除节点  
    if (deleteNode(&head, 20)) {  
        printf("Deleted list: ");  
        printList(head);  
    }  
    // 释放链表内存
    freeList(head);
    // 释放链表内存
  
    return 0;  
}

运行结果如下:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2082326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

<Rust>egui学习之小部件(四):如何在窗口中添加滑动条部件?

前言 本专栏是关于Rust的GUI库egui的部件讲解及应用实例分析&#xff0c;主要讲解egui的源代码、部件属性、如何应用。 环境配置 系统&#xff1a;windows 平台&#xff1a;visual studio code 语言&#xff1a;rust 库&#xff1a;egui、eframe 概述 本文是本专栏的第四篇博…

Ubuntu 24.04 安装 intel 编译器

目录 1.采用用户界面 GUI 安装英特尔基本工具包 Intel oneAPI Base Toolkit 1.1 下载离线英特尔基本工具包 1.2 安装英特尔基本工具包 1.3 英特尔基本工具包 Intel oneAPI Base Toolkit 环境设置 2.安装英特尔基本工具包 Intel HPC Toolkit 2.1 下载离线英特尔高性能计算…

智能座舱高通8155摄像头方案

高通汽车开发平台 &#xff08;ADP&#xff09;基于8155的多媒体硬件框图如下所示&#xff1a;有4个4路CSI摄像头处理通路&#xff0c;2个4路DSI屏幕处理通路&#xff0c;1个DisplayPort。 基于摄像头的详细方案如下&#xff1a;可以处理4路MAX9296解串后信号。 再深入细化基于…

Java10 集合

集合 集合集合接口等级&#xff1a;Collection&#xff1a;单例集合接口,将数据一个一个存储&#xff0c;存储的是值。ArrayList类&#xff1a;泛型集合Linkedlist集合&#xff1a;Vector集合&#xff1a;Stack集合&#xff1a;Vetor的子类 Set接口&#xff1a;存储是无序的&am…

【使用 Python 进行截图的两种方法】

在 Python 中&#xff0c;可以使用 pyautogui 和 Pillow 进行截图 使用 pyautogui 进行截图时&#xff0c;其提供了方便的函数。例如&#xff0c;使用 pyautogui.screenshot() 函数可以获取整个屏幕的截图&#xff0c;该函数返回一个包含屏幕截图的图像对象。如果不想截取整个…

最大噪音值甚至受法规限制,如何基于LBM算法有效控制风扇气动噪音

风扇的气动噪声 在工业设备行业&#xff0c;最大噪音值受法规限制。在很多使用风扇冷却的设备上&#xff0c;风扇噪声通常是这些设备工作噪声的最大贡献量。而在家电民用行业&#xff0c;例如空调、空气净化器、油烟机等&#xff0c;其噪音大小直接关系到用户的体验感受&#x…

从零开始掌握容器技术:Docker的奇妙世界

容器技术在当今的云计算和软件开发领域中扮演着越来越重要的角色。如果你是一名计算机专业的学生或从事IT行业的从业者&#xff0c;可能已经听说过Docker这个词。它在软件开发、部署、运维等环节中大放异彩&#xff0c;但对于刚接触这个概念的朋友来说&#xff0c;可能还是有些…

【乐企】有关乐企能力测试接口对接(详细)

1、申请密钥 2、验证本地服务器与乐企服务器的连通性 乐企服务器生产和测试域名均为&#xff1a;https://lqpt.chinatax.gov.cn:8443。开发者可以在“能力中心”查看基础公用能力详情&#xff0c;按照能力接入和开发指引完成接口对接&#xff0c;验证服务器连通性和证书配置正确…

给一个web网站,如何开展测试?

前言 Web测试是指针对Web应用程序(网站或基于Web的系统)进行的测试活动&#xff0c;以确保其质量、性能、安全性、可用性和兼容性等方面符合预期标准。Web测试涵盖了从前端用户界面(UI)到后端逻辑和数据库的各个方面&#xff0c;确保Web应用程序在不同环境和条件下都能正常运行…

参会投稿 | 第三届先进传感与智能制造国际学术会议(ASIM 2024)

第三届先进传感与智能制造国际会议&#xff08;The 3rd International Conference on Advanced Sensing, Intelligent Manufacturing&#xff09;&#xff0c;由江汉大学、西安交通大学和山东大学主办&#xff0c;由江西省机械工程学会、东华理工大学机械与电子工程学院等联合协…

Hibernate 批量插入速度慢的原因和解决方法

由于业务需要一次性连续写入超过10k条以上的新数据&#xff0c;当对象超过10个成员变量以后&#xff0c;整个写入过程居然需要长达35秒&#xff0c;这个速度是不能接受的&#xff0c;故此研究了一下怎么开启Hibernate批量写入的功能。 我这边使用的是Hibernate 5.6.15 在网上…

推动光模块技术发展:从400G、800G到1.6T

随着数据通信领域的持续发展&#xff0c;对于更快、更高传输速率的需求也在不断增长。作为现代数据传输的基石&#xff0c;光模块技术不断进步以满足这一需求。其中一项重大进展是网络速率从400G提升到800G&#xff0c;并将向1.6T继续发展。让我们深入探讨这些技术的演变&#…

Java语言程序设计基础篇_编程练习题***17.9 (地址簿)

目录 题目&#xff1a;***17.9 (地址簿) 习题思路 代码示例 结果展示 题目&#xff1a;***17.9 (地址簿) 编写程序用于存储、返回、增加&#xff0c;以及更新如图 17-20 所示的地址薄。使用固定长度的字符串来存储地址中的每个属性。使用随机访问文件来读取和写人一个地址…

刚刚认证!网络主播成为国家新职业,易播易赚打造打造职业入门全新模式

近期&#xff0c;人力资源和社会保障部会同国家市场监督管理总局、国家统计局日前增设网络主播为国家新职业&#xff0c;这标志着网络主播的职业身份在“国家确定职业分类”上首次得以确立。 据人社部此前印发的《关于加强新职业培训工作的通知》表示&#xff0c;新职业从业者可…

代码随想录算法训练营第二十三天| 39. 组合总和 40.组合总和II 131.分割回文串

目录 一、LeetCode 39. 组合总和思路&#xff1a;C代码 二、LeetCode 40.组合总和II思路C代码 三、LeetCode 131.分割回文串思路C代码 总结 一、LeetCode 39. 组合总和 题目链接&#xff1a;LeetCode 39. 组合总和 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;带你学…

直播平台直播API集成之快手篇

前言: 本篇我们来介绍如何使用快手 的直播API创建直播。 准备工作: 1、你首先得有个快手账号; 2、创建快手应用,填写应用审核信息,等待应用创建审核通过,应用成功创建后在开发与上线前还要提前做好API权限申请,如果你只需要获取用户基本信息,以及得到直播API的访问权限…

Python | Leetcode Python题解之第377题组合总和IV

题目&#xff1a; 题解&#xff1a; class Solution:def combinationSum4(self, nums: List[int], target: int) -> int:dp [1] [0] * targetfor i in range(1, target 1):for num in nums:if num < i:dp[i] dp[i - num]return dp[target]

合宙LuatOS产品规格书——Air700EMQ

Air700EMQ是合宙通信的LTE Cat.1bis通信模块&#xff0c; 依托移芯EC716E平台&#xff0c;支持先进的LTE 3GPP Rel.13技术。 主要特点如下&#xff1a; 1. 技术平台与标准支持&#xff1a; Air700EMQ采用移芯EC716E平台&#xff0c;基于先进的LTE技术。支持LTE 3GPP Releas…

leetcode234. 回文链表(java实现)

题目描述&#xff1a; 本道题的思路可以使用集合先存储链表的值&#xff0c;然后进行判断即可。 总体思路比较简单。 代码实现&#xff1a; class Solution {public boolean isPalindrome(ListNode head) {List<Integer> res new ArrayList();ListNode cur head;whil…

3分钟快速本地搭建RSShub服务器并结合内网穿透实现无公网IP远程访问

文章目录 前言1. Docker 安装2. Docker 部署Rsshub3. 本地访问Rsshub4. Linux安装Cpolar5. 配置公网地址6. 远程访问Rsshub7. 固定Cpolar公网地址8. 固定地址访问 前言 今天和大家分享的是如何在本地快速简单部署Rsshub工具&#xff0c;并结合cpolar内网穿透工具使用公网地址远…