单向链表操作(C语言)

这篇博客详细介绍了如何使用C语言进行单向链表的操作,包括链表的建立、元素追加、遍历、删除、查找、修改,以及找到链表的尾节点和中间节点。此外,还探讨了单向链表的合并、排序和转换为循环链表的方法。值得注意的是,这里的链表有一个特殊的头节点,其数据域为-1,并且链表转为循环链表后,原有的遍历方式不再适用。
摘要由CSDN通过智能技术生成

该代码包含单向链表的建立,追加,遍历,删查改,判空,返回尾结点和中间节点,额外包含了单向链表的合并,排序,和将单向链表转换成循环链表.

注意:
该链表为带头节点的单向链表,头节点的数据域为-1.
将链表改为循环链表后,遍历操作不再适用于循环链表

代码如下.

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

typedef struct node
{
   
    int data;                //链表的数据域
    struct node * next;     //链表的指针域
}node;

//节点初始化
node * create_node()
{
   
    node *p = (node*)malloc(sizeof(node));
    p->data = -1;
    p->next = NULL;
}

//建立链表,尾部增加
node *link_list(int d[], int size)
{
   
	int i;
    node *head = create_node();
    node *tail = head;          //尾节点,此时尾结点就是头结点
    for(i = 0;i < size;i++)
    {
   
        node *p = (node *)malloc(sizeof(node));
        p->data = d[i];
        p->next = NULL;
        tail->next = p;
        tail = p;               //p变为尾节点
    }
    return head;
}

//追加一个节点(尾部追加)
void append(node *head,int elem)
{
   
    node *p = create_node();
    p->data = elem;
    node *s = head;
    while(s->next != NULL)
    {
   
        s = s->next;
    }
    s->next = p;
}

//返回链表长度
int len(node *head)
{
   
    node *s = head;
    int count = 0;
    for(;s != NULL;count++)
    {
   
        s = s->next;
    }
    return count;
}

//插入元素到链表之中
void insert(node *head,int i,int elem
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值