题目描述

输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。

链表结点定义如下:

struct ListNode
{int m_nKey;ListNode* m_pNext;
};

正常返回倒数第k个结点指针,异常返回空指针.

要求:

(1)正序构建链表;

(2)构建后要忘记链表长度。

数据范围:链表长度满足 1≤n≤1000 ,k≤n ,链表中数据满足0≤val≤10000

本题有多组样例输入。

题目来源

题目来源

输入描述

输入说明
1 输入链表结点个数
2 输入链表的值
3 输入k的值

输出描述:

输出一个整数

输入:   81 2 3 4 5 6 7 84
输出:5

思路

【快慢双指针】我们准备快慢双指针,都从链表头出发,快指针先行k步,达不到k步说明链表过短,返回空链表。然后快慢指针同步向后,快指针先到底,慢指针指向倒数第k个,因为它们之间差了k个元素。

具体实现

#include<iostream>
#include<string>
using namespace std;//链表节点定义
struct ListNode
{int data;ListNode* next;ListNode(int x) : data(x), next(NULL) {}//节点的构造函数
};//输出单向链表中倒数第K个节点
int printk(ListNode* L,int k){ListNode* left = L; ListNode* right = L->next;//左右双指针int i = 1;//左右指针的距离,初始值为1while (right != NULL){//寻找倒数第k个节点right = right->next;++i;if (i > k){left = left->next;i--;}}if (left == L&& i<k)//若左指针没发生移动且距离小于k,说明不存在倒数K个元素return NULL;elsereturn left->data;
}int main()
{while (true){int n;//定义链表节点个数cout << "请输入链表长度: " << endl;cin >> n;cout <<  "请输入头节点元素值: " << endl;int val;//定义各个节点的data值cin >> val;ListNode *head = new ListNode(val);   //创建链表头结点ListNode *p = head;for (int i = 1; i < n; i++){     //输入链表其余节点,并采用尾插法以此插入链表中cout << "请输入剩余节点元素值: " << endl;cin >> val;ListNode *q = new ListNode(val);q->next = p->next;p->next = q;p = p->next;}int k;   //定义要寻找的节点为倒数第k个cout << "请输入,要输出的节点为倒数第几个: " << endl;cin >> k;if (k <= 0)//k大于0时才正常输出cout << "输入错误" << endl;else{cout << printk(head,k) << endl;}system("pause");system("cls");}return 0;
}

时间复杂度

①时间复杂度:O(n),总共遍历n个链表元素
②空间复杂度:O(1),链表空间属于必要空间,无额外空间

小结

①双指针用于对元素之间距离的把控
②构造函数初始化(本菜鸟还没学构造函数,插个眼)
③新建节点为甚么需要new? 答:需要开辟内存,指针才有得指

蓝蓝算法06--输出链表中倒数第k个结点相关推荐

  1. 输出链表中倒数第k个结点

    题目描述输入一个链表,输出该链表中倒数第k个结点. 分类:链表 解法1:双指针,第一个指针先走k步,然后第二个指针也开始走,当第一个指针到达末尾,第二个指针也就是到了倒数第k个节点 要注意null链表 ...

  2. 算法:输入一个链表,输出该链表中倒数第k个结点。

    算法:输入一个链表,输出该链表中倒数第k个结点.<剑指offer> 思路加到注释里面了: 1:两个if判断是否返回值为空,首个为空,没有第k个值: 2:for循环找到倒数第k个值,返回为a ...

  3. 已知一个带有表头的单链表,结点结构为data-link,假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数)。

    今天和大家分享一道2009年代码为408的一道真题: 已知一个带有表头的单链表,结点结构为data-link,假设该链表只给出了头指针list.在不改变链表的前提下,请设计一个尽可能高效的算法,查找链 ...

  4. 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点

    第 13 题(链表): 题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表 的尾指针. 链表结点定义如下: struct ListNode { int m_nKey ...

  5. 一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针

    输入一个单向链表,输出该链表中倒数第k个结点.链表的倒数第0个结点为链表的尾指针 typedef struct _node_t {struct _node_t *next;int data; }Nod ...

  6. 输出该链表中倒数第k个结点

    package demo;/* public class headNode {int val;headNode next = null;headNode(int val) {this.val = va ...

  7. 华为机试HJ51:输出单向链表中倒数第k个结点

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针. ...

  8. 【Java】找到链表中倒数第k个结点

    题目描述 : 输入一个链表,输出该链表中倒数第k个结点. 解题思路 : 1.根据以上链表进行分析 2.算法思想 : 定义两个引用,即快慢指针,都从头节点开始向后走: 要找到倒数第k个节点,即要让快指针 ...

  9. 剑指offer_第14题_链表中倒数第k个结点_Python

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 理解 链表详解 python数据结构之链表 解题思路 思路1 确定链表种结点个数lenth 倒数第k个结点就是第length-k+1个结点 需要考 ...

最新文章

  1. 百度编辑器ueditor每次编辑后多一个空行的解决办法
  2. 7系列GTX中的疑惑
  3. 成功解决Cannot find declaration to go to
  4. OpenGL Tessellation细分曲面的实例
  5. 【机器视觉】 dev_get_exception_data算子
  6. pool python 传参数_Python-爬虫-多线程、线程池模拟(urllib、requests、UserAgent、超时等)...
  7. 【POJ - 2226】Muddy Fields(匈牙利算法 或 网络流dinic,二分图匹配,最小点覆盖,矩阵中优秀的建图方式 )
  8. python 中m op n运算_Python数字类型、数值运算操作符、数值运算函数
  9. 解题:NOI 2016 优秀的拆分
  10. Okhttp之CacheInterceptor简单分析
  11. Java二级练习试题一
  12. Web全栈~02.表单样式设计
  13. spyder selenium配置
  14. Eucalyptus环境搭建
  15. linux视频补帧,如何用 60 帧播放 24 帧的视频?
  16. 硬件设计23之三极管开关原理与场效应管开关原理
  17. websocket即时通讯
  18. 中国污水处理市场现状调研与投资前景预测分析报告2022年版
  19. 【附源码】Java计算机毕业设计计算机配件价格查询微信小程序(程序+LW+部署)
  20. BIM技术全过程咨询服务如何打响建筑革命?

热门文章

  1. 名帖157 王徽之 行楷《新月帖》
  2. Istio系列学习(十四)----Istio策略适配器配置和Env适配器配置
  3. 树与二叉树——由前序序列和中序序列确定一刻二叉树
  4. 解耦matlab仿真,感应电机解耦控制及MATLAB仿真研究
  5. 解决IE8/IE9无法加载Activex控件问题
  6. 李永乐讲通信与计算机专业,哈工大通信与信息工程18考研经验分享
  7. 手机电话本怎么导入另一个手机
  8. 黑苹果从入门到精通:可能是世界上最详细的VMware安装macOS教程
  9. 外置MOS 开关型 PWM调光 降压恒流驱动芯片
  10. 佐治亚大学提供金融科技学位课程