1 问题

打印链表的倒数第N个节点的值,(要求能只能便利链表一次)

比如链表如下,打印倒数第三个值就是4

1-> 2-> 3-> 4-> 5-> 6

2 思路

既然只要只能遍历一次,我们可以这样思考,比如我们要得到倒数第三个,那么它和尾巴的长度就是3,我们可以这一节距离一直往左边移动,那么移动最左边的话,他们的开始是1,尾巴是3,所以我们搞2个指针进行移动就行,如下过程,就可以得到4.

1   ->   2   ->   3   ->   4   ->   5  ->  6

start

end

1   ->   2   ->   3   ->   4   ->   5  ->  6

start               end

1   ->   2   ->   3   ->   4   ->   5  ->  6

start              end

无非就是上面的逆过程,我们用代码实现就行

3 代码实现

#include <iostream>using namespace std;typedef struct node
{int value;struct node *next;
} Node;void printN(Node *head, int n)
{if (head == NULL || n <= 0){std::cout << "head is NULL or n <= 0" << std::endl;return; }Node *start = head;Node *end = head;//这里需要考虑n的大小长度是否大于链表长度//我们不能直接遍历链表得到链表大小然后和n比较//那我们就用start->next != NULL来判断也行for (int i = 0; i < n - 1; ++i){if (start->next != NULL)start = start->next;else{std::cout << "the value of n is more than larger the length of list" << std::endl;return;}}while (start->next != NULL){end = end->next;start = start->next;}std::cout << "the value is: " << end->value << std::endl;
}int main()
{Node *head = NULL;Node *node1 = NULL;Node *node2 = NULL;Node *node3 = NULL;head = (struct node*)malloc(sizeof(Node));node1 = (struct node*)malloc(sizeof(Node));node2 = (struct node*)malloc(sizeof(Node));node3 = (struct node*)malloc(sizeof(Node)); if (head == NULL || node1 == NULL || node2 == NULL || node3 == NULL){std::cout << "malloc fail" << std::endl;return -1;}head->value = 0;head->next = node1;node1->value = 1;node1->next = node2;node2->value = 2;node2->next = node3;node3->value = 3;node3->next = NULL;printN(head, 3);free(head);free(node1);free(node2);free(node3);return 0;}

4 运行结果

the value is: 1

5 总结

请记住,2个指针像一把梭子,那样在移动,是那么的美妙,所以当一个指针便利不了的时候,要记得用2个指针便利

然后还有类似的问题,比如求链表的中点,链表长度是奇数的时候,取中间的数字,如果链表长度是偶数的话,取中间的2个都行,我们依然用2个指针,一个走一步,一个走2步,当快的走完了的时候,慢的的走到中间了,切记。

剑指offer之打印链表的倒数第N个节点的值相关推荐

  1. 【剑指offer】22.链表中倒数第k个节点

    Python3 方法1 将链表的节点保存在数组中,返回索引为-k的节点,即为链表中倒数第k个节点. class Solution:def getKthFromEnd(self, head: List[ ...

  2. 剑指offer之找到链表里面包含环的入口节点

    1 问题 剑指offer之找到链表里面包含环的入口节点,比如 // node7<-node6 <-node5// | |//head->node1->node2->nod ...

  3. 剑指offer 从头到尾打印链表

    题目描述 输入一个链表,从尾到头打印链表每个节点的值. 解决办法: import java.util.ArrayList; public class Solution {public ArrayLis ...

  4. 剑指 Offer 22(链表4).链表中的倒数第k个结点

    剑指 Offer 22(链表4).链表中的倒数第k个结点 问题描述: 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例如,一个链 ...

  5. 《LeetCode力扣练习》剑指 Offer 24. 反转链表 Java

    <LeetCode力扣练习>剑指 Offer 24. 反转链表 Java 一.资源 题目: 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1-& ...

  6. 剑指Offer:反转链表【24】

    剑指Offer:反转链表[24] 题目描述 输入一个链表,反转链表后,输出新链表的表头. 解题分析 这道题我才发现我是属于那种真的笨,图都画出来了流程写不出来.看了别人的代码,总觉得自己差一步. 这也 ...

  7. 【LeetCode】剑指 Offer 35. 复杂链表的复制

    [LeetCode]剑指 Offer 35. 复杂链表的复制 文章目录 [LeetCode]剑指 Offer 35. 复杂链表的复制 package offer;import java.util.Ar ...

  8. 【LeetCode】剑指 Offer 18. 删除链表的节点

    [LeetCode]剑指 Offer 18. 删除链表的节点 文章目录 [LeetCode]剑指 Offer 18. 删除链表的节点 一.双指针 一.双指针 本题删除值为 val 的结点需分为两步: ...

  9. 【LeetCode】剑指 Offer 17. 打印从1到最大的n位数

    [LeetCode]剑指 Offer 17. 打印从1到最大的n位数 文章目录 [LeetCode]剑指 Offer 17. 打印从1到最大的n位数 一.大数 一.大数 将 1~9 加入队列 对队列中 ...

最新文章

  1. Scala 深入浅出实战经典 第88讲:Scala中使用For表达式实现map、flatMap、filter
  2. ubuntu live cd修复grub引导项
  3. OnClickListener冲突的问题
  4. Linux下配置OpenLDAP服务记录
  5. 联想开机启动项按哪个_联想电脑开机按f12后,怎么设置默认启动项
  6. 两个服务器 文件比较,使用linux的comm命令比较两个已排过序的文件
  7. c语言实现可变单链表,c语言实现单链表
  8. Windows版Mysql5.6.11的安装与配置
  9. DockerKubernetes ❀ Kubernetes集群 - DashBoard服务(Web管理)安装部署
  10. awesomes前端资源库网站
  11. 51.php-fpm的pool 慢日志 open_basedir 进程管理
  12. asp是什么, javascript和php,asp区别,什么是 JavaScript 引擎, nodejs和vuejs的关系,nodejs和javascript区别
  13. cron每半个小时执行一次_Linux中Cron任务间隔执行:每隔几分钟/几小时/几天
  14. educode寄存器设计与应用之节拍脉冲发生器的设计(在Logisim上实现)
  15. python做马尔科夫模型预测法_python实现隐马尔科夫模型HMM
  16. AOP技术介绍--(.Net中关于AOP的实现)
  17. 项目管理笑话集之诸葛亮借东风
  18. python朴素贝叶斯分类器实现_用scikit-learn实现朴素贝叶斯分类器
  19. 如何让系统加载自己写的驱动程序?
  20. Python爬取图片+百度人脸检测过滤高颜值美女

热门文章

  1. 关于Asp.net core配置信息读取的源码分析梳理
  2. 云原生开发框架dapr环境搭建:CLI安装和初始化
  3. 国内最大.NET平台重金招募中 你竟然还不知道?
  4. 记一次 .NET WPF布草管理系统 挂死分析
  5. 如何容器化你的 ASP.Net Core
  6. BeetleX之Web网关1.5.7安装使用
  7. EFCore查缺补漏(二):查询
  8. 读书 | IT人如何直击本质洞察底层逻辑?
  9. 一名“企业定制化人才”的自诉:“我不愿意,但却无可奈何”
  10. 解析“60k”大佬的19道C#面试题(下)