首页 > 其他分享 >单链表的一些操作(c语言):插入头节点、尾节点、删除某个节点

单链表的一些操作(c语言):插入头节点、尾节点、删除某个节点

时间:2025-01-03 19:31:27浏览次数:3  
标签:node head 单链 temp Next 插入 NULL data 节点

#include <stdio.h>

#include <stdlib.h>

struct Node

{

    int data;

    struct Node *Next;

    /* data */

};

typedef struct Node node;

node *Link;

//  创建一个新的节点

node *CreateNewNode(int data)

{

    node *NewNode = (node *)malloc(sizeof(node));

    if (NewNode == NULL)

        exit(1);

    NewNode->data = data;

    NewNode->Next = NULL;

    return NewNode;

}

// 在链表末尾插入一个节点

node *InsertNode(node *head, int data)

{

    node *new_node = CreateNewNode(data);

    node *temp_node;

    temp_node = head;

    if (temp_node == NULL)

    {

        return new_node;

    }

    while (temp_node->Next != NULL)

    {

        temp_node = temp_node->Next;

    }

    temp_node->Next = new_node;

    return head;

}

// 头插法

node *insertNodeBegin(node *head, int data)

{

    node *newNode = CreateNewNode(data);

    if (head == NULL)

        return newNode;

    newNode->Next = head->Next;

    head->Next = newNode;

    return head;

}

// 打印链表

void print_chain(node *head)

{

    node *temp;

    temp = head;

    while (temp->Next != NULL)

    {

        printf("%d-->", temp->data);

        temp = temp->Next; // 更新链表

    }

    printf("NULL\r\n");

}

// 删除某一个节点

node *DeleNode(node *head, int data)

{

    node *temp_node = head;

    node *dele_node = NULL;

    if (temp_node->data == data)

    {

        head = temp_node->Next;

        free(temp_node);

        return head;

    }

    while (temp_node->Next != NULL)

    {

        if (temp_node->Next->data == data)

        {

            dele_node = temp_node->Next;

            temp_node->Next = dele_node->Next;

            break;

        }

        temp_node = temp_node->Next;

    }

    if (dele_node != NULL)

    {

        free(dele_node);

    }

    return head;

}

int main()

{

    node *head = NULL;

    head = InsertNode(head, 10);

    head = InsertNode(head, 20);

    head = InsertNode(head, 30);

    head = InsertNode(head, 40);

    head = insertNodeBegin(head, 50);

    print_chain(head);

    head = DeleNode(head, 30);

    print_chain(head);

}

标签:node,head,单链,temp,Next,插入,NULL,data,节点
From: https://blog.csdn.net/qiuhao1314520/article/details/144914767

相关文章

  • 数据结构:循环单链表
    循环单链表(CircularSinglyLinkedList)循环单链表是单链表的一种变体,其特点是链表的尾节点指向头节点,形成一个闭环。这种结构允许在链表中进行无缝的遍历,并且可以从任何节点开始遍历整个链表。循环单链表通常用于需要循环访问元素的场景,如轮询调度、环形缓冲区等。1.节点结......
  • MySQL优化--插入数据优化和主键优化
    一、插入数优化(insert)平时我们插入数据的时候一般都是一个语句插一个数据,如下所示:insertintotb_testvalues(1,'tom');insertintotb_testvalues(2,'cat');insertintotb_testvalues(3,'jerry');如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优......
  • 【初阶数据结构与算法】排序算法总结篇(每个小节后面有源码)(直接插入、希尔、选择、堆
    文章目录一、直接插入排序二、希尔排序三、直接选择排序四、堆排序五、冒泡排序六、快速排序七、归并排序八、计数排序九、非递归快速排序十、非递归归并排序本篇内容将从稳定性与复杂度等角度分析排序算法,列出它们的特点、优点以及缺点,希望大家有所收获,如果想更加细......
  • 单链表的创建以及插入<上>
    1:此次学习参考的是b站up主【【一听就懂】C语言单链表(合集)!学完C语言还没学会写单链表吗?一节课教你有头单链表的全部知识!】https://www.bilibili.com/video/BV1Mm4y1V7Ww?vd_source=fa5bfcb2d5af224272cc17f6b40b10c3易错点2.1在 creatlist 和 creatNode 函数中,......
  • 链表操作<下>节点的删除和销毁
    注意点:1:悬空指针的处理,释放后如果要再次使用要对其指为空指针2:数据;排序可以用到冒泡排序的方法来解决/用于判断该链表是否为空boolempty(Node*list){returnlist==NULL;//链表不存再就会执行true,否则false;}voidshowList(Node*head){if(empty(h......
  • opencv FileStorage file怎么判断某个节点名字是否存在
    在OpenCV中,使用FileStorage读取文件时,可以通过检查节点是否存在来判断某个节点名字是否存在。可以使用FileNode::empty()方法来实现这一点。示例代码以下是一个示例,展示如何判断某个节点名字是否存在:#include<opencv2/opencv.hpp>#include<iostream>intmain(){......
  • 链表算法篇——链接彼岸,流离节点的相遇之诗(上)
    文章目录前言第一章:链表的意境——节点的孤岛与连接的艺术第二章:链表算法的流动美学第三章:两数相加3.1题目链接:https://leetcode.cn/problems/add-two-numbers/description/3.2题目分析:3.3思路讲解:3.4代码实现:第四章:两两交换链表中的节点4.1题目链接:https://leetc......
  • (王道练习代码仓库)单链表操作
    #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>typedefintElemtype;//节点定义typedefstructLNode{ Elemtypedata; structLNode*next;}LNode,*LinkList;//求链表的长度intLenthList(LinkListhead){ LNode*p=head->next;......
  • 搜索插入位置(二分查找)
    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(logn) 的算法。 示例1:输入:nums=[1,3,5,6],target=5输出:2示例 2:输入:nums=[1,3,5,6],target=2输......
  • DOM节点至少包含哪些属性?
    DOM节点至少包含以下三个基本属性:nodeName:节点的名称。这个属性是只读的,它表示节点的名字或类型。对于元素节点,nodeName的值与标签名相同;对于属性节点,它是属性的名称;文本节点的nodeName永远是“#text”;而文档节点的nodeName则是“#document”。nodeValue:节点的值。这个属性......