用c语言实现计算单链表长度,链表的各种题目整理(C语言实现)

本文介绍了使用C语言实现单链表的一些常见操作,包括计算链表长度、反转链表、查找倒数第k个元素、找到链表中间结点、逆序打印链表、判断链表是否有环以及找出环的入口结点。通过实例代码详细阐述了每个操作的算法思想和实现过程。
摘要由CSDN通过智能技术生成

typedef struct node {

char *data;

struct node *next;

} node_t;

我们约定一个打印链表的函数:

void list_display(node_t *head)

{

for (; head; head = head->next)

printf("%s ", head->data);

printf("\n");

}

下面是几个常见的链表笔面问题:

1.计算链表长度

很简单:(复杂度O(n))

int list_len(node_t *head)

{

int i;

for (i = 0; head; head = head->next, i++);

return i;

}

测试:

int main(int argc, const char *argv[])

{

node_t d = {"d", 0}, c = {"c", &d}, b = {"b", &c}, a = {"a", &b};

printf("%d\n", list_len(&a));//4

return 0;

}

2.反转链表

我们多用几个指针就可以在O(n)完成反转任务:

算法:t遍历链表, q记录t的上一个结点, p是一个临时变量用来缓存t的值

void

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值