经典面试题】寻找单链表倒数第n个节点_C/C++
来源:互联网 发布:iea数据 编辑:程序博客网 时间:2024/06/05 05:56
面试中经常出现的编程题之一。
最直接的办法是先遍历一遍单链表,记下链表的节点数,然后再次遍历,直到到达节点数减去n的节点,返回结果。实际情况中若链表数目很多而n相对不大,这种方法需要大约两次遍历。更简单的实现方法是采用双指针。一个指针先从链表头开始步进n步,然后另一个指针从头开始,两个指针一同步进直到达到链表尾。这是第二个指针所指的节点即为链表的倒是第n个节点。实现代码如下:
- struct node * lastn(struct node * head, int n){
- struct node *p, *q;
- if(n < 1){
- return NULL;
- }
- q = head;
- while(--n){
- if(!q->next){
- return NULL;
- }
- q = q->next;
- }
- p = head;
- while(q->next){
- p = p->next;
- q = q->next;
- }
- return p;
- }
需要注意一些特殊情况的检查:
1.n大于节点数目
2.参数n为0或者负数
3.参数head为空指针
双链表方法可以实现很多问题的解答,还有一个例子是求单链表是否有环。这时可以使用两个链表,一个步进一步,一个步进两部,如果有环两链表就会相遇。
摘自:http://blog.csdn.net/ruizeng88/article/details/6700727
- 【经典面试题】寻找单链表倒数第n个节点_C/C++
- 经典面试题】寻找单链表倒数第n个节点_C/C++
- 【经典面试题】寻找单链表倒数第n个节点
- 【面试题】删除链表中倒数第n个节点
- 寻找单链表的倒数第N个节点
- offer面试题二-----寻找链表的倒数第K个节点
- 寻找链表的倒数第N个节点
- 删除单链表倒数第n个节点
- 面试题15:链表中倒数第k个节点
- 面试题15:链表中倒数第K个节点
- 面试题15:单链表中倒数第k个节点
- 面试题15:链表中倒数第k个节点
- 面试题15:链表中倒数第K个节点
- 寻找倒数第K个节点...
- 寻找倒数第K个节点...
- CareerCup之2.2 寻找单链表倒数第n个元素
- 删除单链表的倒数第N个节点
- 返回单链表的倒数第n个节点
- ftp配置
- 强制转换符号重载的问题
- LayoutInflater的inflate函数用法详解
- Qt Creator 为我们的程序写一个动态链接库help.dll
- Ajax使用的四大步骤
- 经典面试题】寻找单链表倒数第n个节点_C/C++
- C++ 第七周任务-用星图体验循环结构程序设计
- Wireshark抓包工具使用教程以及常用抓包规则 ——Powered By 死性不改
- String对象常用API
- 线性表的链式存储结构之单链表类的实现_Java
- linux网络管理 网卡流量
- 线性表的链式存储结构之单链表结点类的实现_Java
- Eclipse下启动AVD Manager失败,提示找不到.android/avd/AndroidXXX.ini地解决办法
- Android 开发之使用Eclipse Debug调试详解