单向带头链表

这篇文章展示了如何在C语言中使用结构体定义链表节点,并实现创建链表、打印节点数据、按值删除节点以及按值插入新节点的功能。代码包括一个创建包含三个节点的链表的函数,一个打印链表所有节点的函数,一个按值删除节点的函数,以及一个按值插入新节点的函数。在main函数中,这些操作被演示和测试。
摘要由CSDN通过智能技术生成
#include <stdio.h>
#include <stdlib.h>



struct node
{
    int data;
    struct node *next;
};

typedef struct node NODE;

NODE *create()
{
    NODE *head, *end_node, *new_node;
    head = malloc(sizeof(NODE));
    end_node = head;

    new_node = malloc(sizeof(NODE));
    new_node->data = 10;
    end_node->next = new_node;
    end_node = new_node;

    new_node = malloc(sizeof(NODE));
    new_node->data = 20;
    end_node->next = new_node;
    end_node = new_node;

    new_node = malloc(sizeof(NODE));
    new_node->data = 30;
    end_node->next = new_node;
    end_node = new_node;

    end_node->next = NULL;

    return head;
}

void print_node(NODE *head)
{

    NODE *current_node;
    current_node = head->next;
    if(current_node == NULL)
    {
        printf("null \n");
    }else
    {
        while (current_node != NULL)
        {
            printf("%d \n", current_node->data);
            current_node = current_node->next;
        }
    }
}

void delete_node(NODE *head, int t)
{
    NODE *current_node, *front_node;
    front_node = head;
    current_node = head->next;
    while (current_node != NULL)
    {
        if (current_node->data == t)
        {
            front_node->next = current_node->next;
            free(current_node);
            printf("Found!\n");
            return;
        }else
        {
            front_node = current_node;
            current_node = current_node->next;
        }
    }
    printf("Not found\n");
}

void insert_node(NODE *head, int in_data)
{
    NODE *current_node, *front_node, *add_node;

    add_node = malloc(sizeof(NODE));
    add_node->data = in_data;

    front_node = head;
    current_node = head->next;

    while (current_node != NULL)
    {
        if (current_node->data < in_data)
        {
            front_node = current_node;
            current_node = current_node->next;
        }else
        {
            break;
        }
    }
    front_node->next = add_node;
    add_node->next = current_node;
}

int main(void)
{
    NODE *h;
        
    h = create();
    // printf("%p\t %d\n", h,h->data);
    print_node(h);
    
    delete_node(h, 10);

    print_node(h);

    insert_node(h, 10);

    print_node(h);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值