链表面试题总结(一)

本文总结了链表的六种常见操作:1) 冒泡排序;2) 删除无头非尾节点;3) 反转链表;4) 在当前节点前插入数据;5) 查找链表中间节点;6) 删除倒数第K个节点。针对每个问题,提供了详细的操作思路和代码实现,帮助读者理解和掌握链表的这些基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于上一次写的链表,现在,我们来讨论下面这些问题。

1.链表的冒泡排序
2.删除无头非尾节点
3.反转链表
4.在当前节点前插入一个数据x
5.查找链表的中间节点。
6.删除单链表的倒数第K个节点(K>1&&K<总长度)

对于上面这6个问题,我们进行分析与解答。

链表的代码我都已经写过博客:数据结构—单链表的实现

另外,我也在我的github上有链表的代码,github链接

如还有什么问题,可以发邮件到 953659912@qq.com

1.链表的冒泡排序

关于链表的排序问题是我们需要关心的,链表的排序,排序时比较方便的就是交换链表所保存的内容,所以接下来我们来提供一种思路来解决这个问题。

在这里我们的思路是先有两个指针,一个头指针,一个尾指针,第一次从头进行冒泡到尾,第二次从头冒泡到最后一个节点的前一个节点,就这样一次进行下去,一直到冒泡到第一个节点和第二个节点。
这里写图片描述

讲到这,我想大家应该明白了怎么实现了吧。
下面附上代码实现过程。

void BubbleSort(pLinkList pList)
{

    pLinkNode cur = NULL;
    pLinkNode tail = NULL;
    assert(pList);
    cur = pList->pHead;
    if ((pList->pHead == NULL)||(pList->pHead->next==NULL))
    {
        return;
    }
    while (cur != tail)     //当尾指针不等于头指针时进行冒泡
    {
        while (cur->next != tail)   //控制cur指针最后到的位置是倒数第二个节点
        {

            if (cur->data > cur->next
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值