博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
查找(删除)单链表的倒数第k个结点
阅读量:2242 次
发布时间:2019-05-09

本文共 1273 字,大约阅读时间需要 4 分钟。

1.查找单链表的倒数第k个结点(只能遍历一次链表)

2.删除单链表的倒数第k个结点

对于第一个问题,如果可以两次遍历链表,我们就可以先计算出链表的长度,然后再减去k-1就能求得倒数第k个结点

但只能遍历一次链表,我们就可以用使用两个指针front,back,让front先走,走k-1个结点,然后再让front和back同时走当front走到最后结点的时候,back就走到了倒数第k个结点
这里写图片描述

void Backwords(Node *first, int k)    {        assert(first);        Node *front = first;        Node *back = first;        while (--k)        {            front = front->next;        }        while (front->next != NULL)        {            front = front->next;            back = back->next;        }        printf("%d", back->data);    }

对于第二个问题,无非就是上一个问题的进阶版,先找到倒数第k个结点(注:再次过程中,要把该结点的前一个结点记录下来),然后删除即可,但要注意,如果要删的是头结点尼?这就要另行处理了

void RemoveBackwords(Node **first, int k)    {        assert(first); //判断不是空指针        assert(*first); //判断不是空链表        int flag = 0;        Node *front = *first;        Node *back = *first;        Node *node = NULL;        while (--k)        {            front = front->next;        }        while (front->next != NULL)        {            front = front->next;            node = back;            back = back->next;            flag = 1;        }        //如果flag仍未0,表示要删除的是头结点        if (flag == 0)         {            *first = (*first)->next;            free(back);            return;        }        node->next = back->next;        free(back);    }
你可能感兴趣的文章
Jmeter之参数化
查看>>
Shell 和Python的区别。
查看>>
【JMeter】1.9上考试jmeter测试调试
查看>>
【虫师】【selenium】参数化
查看>>
【Python练习】文件引用用户名密码登录系统
查看>>
学习网站汇总
查看>>
【Loadrunner】性能测试报告实战
查看>>
【自动化测试】自动化测试需要了解的的一些事情。
查看>>
【selenium】selenium ide的安装过程
查看>>
【手机自动化测试】monkey测试
查看>>
【英语】软件开发常用英语词汇
查看>>
Fiddler 抓包工具总结
查看>>
【雅思】雅思需要购买和准备的学习资料
查看>>
【雅思】雅思写作作业(1)
查看>>
【雅思】【大作文】【审题作业】关于同不同意的审题作业(重点)
查看>>
【Loadrunner】通过loadrunner录制时候有事件但是白页无法出来登录页怎么办?
查看>>
【English】【托业】【四六级】写译高频词汇
查看>>
【托业】【新东方全真模拟】01~02-----P5~6
查看>>
【托业】【新东方全真模拟】03~04-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST05~06-----P5~6
查看>>