蓝蓝算法06--输出链表中倒数第k个结点
题目描述
输入一个单向链表,输出该链表中倒数第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个结点相关推荐
- 输出链表中倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点. 分类:链表 解法1:双指针,第一个指针先走k步,然后第二个指针也开始走,当第一个指针到达末尾,第二个指针也就是到了倒数第k个节点 要注意null链表 ...
- 算法:输入一个链表,输出该链表中倒数第k个结点。
算法:输入一个链表,输出该链表中倒数第k个结点.<剑指offer> 思路加到注释里面了: 1:两个if判断是否返回值为空,首个为空,没有第k个值: 2:for循环找到倒数第k个值,返回为a ...
- 已知一个带有表头的单链表,结点结构为data-link,假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数)。
今天和大家分享一道2009年代码为408的一道真题: 已知一个带有表头的单链表,结点结构为data-link,假设该链表只给出了头指针list.在不改变链表的前提下,请设计一个尽可能高效的算法,查找链 ...
- 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点
第 13 题(链表): 题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表 的尾指针. 链表结点定义如下: struct ListNode { int m_nKey ...
- 一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针
输入一个单向链表,输出该链表中倒数第k个结点.链表的倒数第0个结点为链表的尾指针 typedef struct _node_t {struct _node_t *next;int data; }Nod ...
- 输出该链表中倒数第k个结点
package demo;/* public class headNode {int val;headNode next = null;headNode(int val) {this.val = va ...
- 华为机试HJ51:输出单向链表中倒数第k个结点
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针. ...
- 【Java】找到链表中倒数第k个结点
题目描述 : 输入一个链表,输出该链表中倒数第k个结点. 解题思路 : 1.根据以上链表进行分析 2.算法思想 : 定义两个引用,即快慢指针,都从头节点开始向后走: 要找到倒数第k个节点,即要让快指针 ...
- 剑指offer_第14题_链表中倒数第k个结点_Python
题目描述 输入一个链表,输出该链表中倒数第k个结点. 理解 链表详解 python数据结构之链表 解题思路 思路1 确定链表种结点个数lenth 倒数第k个结点就是第length-k+1个结点 需要考 ...
最新文章
- 百度编辑器ueditor每次编辑后多一个空行的解决办法
- 7系列GTX中的疑惑
- 成功解决Cannot find declaration to go to
- OpenGL Tessellation细分曲面的实例
- 【机器视觉】 dev_get_exception_data算子
- pool python 传参数_Python-爬虫-多线程、线程池模拟(urllib、requests、UserAgent、超时等)...
- 【POJ - 2226】Muddy Fields(匈牙利算法 或 网络流dinic,二分图匹配,最小点覆盖,矩阵中优秀的建图方式 )
- python 中m op n运算_Python数字类型、数值运算操作符、数值运算函数
- 解题:NOI 2016 优秀的拆分
- Okhttp之CacheInterceptor简单分析
- Java二级练习试题一
- Web全栈~02.表单样式设计
- spyder selenium配置
- Eucalyptus环境搭建
- linux视频补帧,如何用 60 帧播放 24 帧的视频?
- 硬件设计23之三极管开关原理与场效应管开关原理
- websocket即时通讯
- 中国污水处理市场现状调研与投资前景预测分析报告2022年版
- 【附源码】Java计算机毕业设计计算机配件价格查询微信小程序(程序+LW+部署)
- BIM技术全过程咨询服务如何打响建筑革命?