剑指offer14:输入一个链表,输出该链表中倒数第k个结点。
1. 题目描述
2. 思路和方法
可以用两个指针,一个指针遍历到第k个结点的时候,第二个指针再走到第一个节点,然后两个指针的距离始终保持k-1。这样,当第一个指针的next==NULL,也就是走到最后一个节点的时候,第二个指针对应的位置,就是倒数第k个结点。这样的好处是能够节省一个循环,时间复杂度会相应降低,从Q(2N) 降低到到Q(N)。
注意,但是需要一个小循环让第一个指针先走到第k个指针。同时也存在结点总数小于k的问题,如果循环还没有进行到k次,而第一个指针的已经是NULL,即走到头了,那么,函数返回NULL。
3. C++核心代码
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
ListNode* p = pListHead;
ListNode* q = pListHead;
int i = ;
for(;p != NULL;i++)
{
if(i >= k)
{
q = q->next;
}
p = p->next;
}
return i < k ? NULL:q;
}
};
4. C++完整代码
#include <vector>
#include <algorithm>
#include <string.h>
#include <iostream>
#include <stack> using namespace std; struct ListNode{
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL){}
}; class Solution{
public:
ListNode * FindKthToTail(ListNode* pListHead, unsigned int k){
ListNode* first = pListHead;
ListNode* second = pListHead;
int i = ;
if (first == NULL)
return NULL;
for (i; i <= k; i++){
if (first->next == NULL)
break;
first = first->next;
}
while (first->next != NULL){
first = first->next;
second = second->next;
}
return second;
}
};
int main() { struct ListNode* p = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* r = (struct ListNode*)malloc(sizeof(struct ListNode)); p->val = ;
p->next = NULL; for (int i = ; i>; i--){
struct ListNode* t = (struct ListNode*)malloc(sizeof(struct ListNode));
t->val = i;
t->next = p->next;
cout << "t->next地址="<< t->next << endl;
p->next = t;
cout << " p->next地址=" << p->next << endl;
}
cout << "p->val" << endl;
for (int i = ; i < ; i++){
if (p->next != NULL){
cout << p->val << " ";
p = p->next;
}
}
cout << endl; Solution s;
r = s.FindKthToTail(p, );
cout << "r->val = " << r->val << endl; system("pause");
return ;
}
参考代码
https://blog.csdn.net/yummy_alice/article/details/81358894
https://blog.csdn.net/u013686654/article/details/73827816
剑指offer14:输入一个链表,输出该链表中倒数第k个结点。的更多相关文章
- 剑指Offer-14:输入一个链表,输出该链表中倒数第k个结点。
题目描述: 输入一个链表,输出该链表中倒数第k个结点.例如有一个链表有六个节点1,2,3,4,5,6.则它的倒数第二个节点为5 节点定义如下: public class ListNode { int ...
- 【剑指offer】输入一个链表,输出该链表中倒数第k个结点。
一.题目: 输入一个链表,输出该链表中倒数第k个结点. 二.思路: 用两个指针p1和p2,p2先跑k步,然后p1和p2同时跑,p2跑到头p1所在的位置就是倒数第k个节点.很简单吧?简单你也想不到,想到 ...
- 算法:输入一个链表,输出该链表中倒数第k个结点。
算法:输入一个链表,输出该链表中倒数第k个结点.<剑指offer> 思路加到注释里面了: 1:两个if判断是否返回值为空,首个为空,没有第k个值: 2:for循环找到倒数第k个值,返回为a ...
- 剑指Offer-14.链表中倒数第k个结点(C++/Java)
题目: 输入一个链表,输出该链表中倒数第k个结点. 分析: 第一个解法,我们可以先遍历一遍链表,计算下节点的总数n,然后再从头结点查n-k个节点,即是倒数第k个节点. 第二个解法,便是使用双指针,两个 ...
- 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点
第 13 题(链表):题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表的尾指针.链表结点定义如下: struct ListNode {int m_nKey;Lis ...
- 输入一个单向链表,输出该链表中倒数第K个结点
输入一个单向链表,输出该链表中倒数第K个结点,具体实现如下: #include <iostream> using namespace std; struct LinkNode { publ ...
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...
- 【Java】 剑指offer(22) 链表中倒数第k个结点
正文 本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的 ...
- 剑指Offer - 九度1517 - 链表中倒数第k个结点
剑指Offer - 九度1517 - 链表中倒数第k个结点2013-11-30 02:57 题目描述: 输入一个链表,输出该链表中倒数第k个结点.(hint: 请务必使用链表.) 输入: 输入可能包含 ...
随机推荐
- 关于rsa公钥格式的处理,一行纯内容进行换行格式化
最近在开发百度小程序,他的平台公钥是纯字符串,公钥的内容,没有rsa文件的头(-----BEGIN PUBLIC KEY-----)和尾部分-----END PUBLIC KEY----- 但是 PH ...
- ph:做参考
1 波动学 <伯克利物理学教程>第三卷 上.下册2 场论(朗道)3 场论与粒子物理学(上册)(李政道)出国留学必备书之一!4 场论与粒子物理学(下册)(李政道)5 非平衡态热力 ...
- Qt:使用Model-View,动态的加载显示数据
共有 main.cpp, Widget.h, Widget.cpp, Widget.ui, MyModel.h, MyModel.cpp 六个文件. 可从此下载整个工程文件: /Files/biao/ ...
- ArcGIS超级工具SPTOOLS-编号工具
1.1 整库更新BSM 输入一个MDB或GDB,将所有的要素类和表,按某个字段BSM,BSM不存在,会自动创建,从某个开始,顺序编号. 1.2 更新BSM 根据自己输入的多个表或要素,可以自己编号 ...
- CentOS8安装Python3
安装CentOS8 如果使用vmware player安装CentOS8,会出现如下选项 其中Software Selection默认为带有GUI版本,即安装完成之后,带有图形界面,我本人不太喜欢使用 ...
- 网络时间协议 (SNTP)
sntp是简单网络时间协议(Simple Network Protocol)的客户端,可以用来查询或修正NTP服务器的时间和本地的时差. sntp可以以非交互模式运行或运行一个计划任务的脚本. snt ...
- 011-通过网络协议解析网络请求-DNS-ARP-TCPIP
一.概述 1.1.tcp/ip概述 TCP/IP不是一个协议,而是一个协议族的统称.里面包括IP协议.IMCP协议.TCP协议.跨越了多层模型的多层 TCP/IP协议族按照层次由上到下,层层包装.最上 ...
- Access restriction: The type JPEGImageEncoder is not accessible due to restriction
转: 解决办法:Access restriction: The type JPEGImageEncoder is not accessible due to restriction 2011年11月2 ...
- Throughput Controller(吞吐量控制器) 感觉就像个线程控制器来的
Percent Executions 下的 Throghput 意思是跑总线程的百分之多少. 如 10线程循环一次, Throghput 设置为80,则有8个线程会跑这个请求 Total Execu ...
- pyCharm最新2017激活
pyCharm最新2017:下载地址 下载完成后安装软件 启动pyCharm,进入下面窗口 选择License server 在 server选项里边输入 http://elporfirio.com: ...
