剑指Offer——链表中倒数第k个节点
2024-08-26 10:24:13
Question
输入一个链表,输出该链表中倒数第k个结点。
Solution
一种想法就是扫描两边,第一遍求出总的节点个数,第二遍从头开始走n-k个
第二种思想类似于fast-slow指针的方法,fast指针先走k-1步,让两个指针距离保持为k,然后在一起走,fast走到最后的时候,slow刚好走到倒数第k个节点。
Code
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
// 不能改变链表的结构
// 构造两个指针,他们的距离差为k,那么当第一个指针走到最后的时候,第二个指针刚好到第k个节点的位置
if (pListHead == NULL || k == 0)
return NULL;
ListNode* p1 = pListHead;
ListNode* p2 = pListHead;
for (int i = 0; i < k - 1; i++) {
if (p1->next != NULL)
p1 = p1->next;
else
return NULL;
}
while (p1->next) {
p1 = p1->next;
p2 = p2->next;
}
return p2;
}
// 可以考虑扫描两遍,第一遍求个数,第二遍走n-k个
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if (pListHead == NULL && k <= 0)
return NULL;
int num = 0;
ListNode* tmp = pListHead;
while (tmp) {
num++;
tmp = tmp->next;
}
if (num < k)
return NULL;
for (int i = 0; i < num - k; i++) {
pListHead = pListHead->next;
}
return pListHead;
}
};
最新文章
- 扩大ubuntu虚拟机硬盘空间
- React - redux, jsx中写js示例
- 6.能够使HTML和PHP分离开使用的模板
- Linux高级编程--07.进程间通信
- 13个Cat命令管理文件实例汇总
- 【转】Hibernate和ibatis的比较
- POJ_3083——贴左右墙DFS,最短路径BFS
- 使用inpaint例子,去除水印
- C语言程序_管理系统
- Warning: connect.static is not a function
- 【Git】CentOS7 通过源码安装Git
- waf python build 工具使用流程
- LOJ-10100(割点个数)
- 使用Python+opencv2时的文件命名及路径问题
- 【Android】解决Android横竖屏切换数据丢失问题的方法
- 测试使用highlight.js的代码效果
- vue框架muse-ui官网文档主题错误毕竟【01】
- Current mirror drives multiple LEDs from a low supply voltage
- gcc __attribute__
- springMVC使用拦截器检查用户登录
热门文章
- HttpWatch使用教程
- Java类的加载、链接和初始化(个人笔记)
- #1560 : H国的身份证号码II(dp+矩阵快速幂)
- node.js 关于跨域和传递给前台参数
- debug_backtrace final catch
- Oracle DBA的学习(笔记)
- Connection cannot be null when &#39;hibernate.dialect&#39; not set
- 【转】 HMC与VIOS对新LPAR提供存储与网络虚拟化的支持
- C# 调用ArcGIS server admin api
- jquery生成二维码图片