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;
} };

最新文章

  1. 扩大ubuntu虚拟机硬盘空间
  2. React - redux, jsx中写js示例
  3. 6.能够使HTML和PHP分离开使用的模板
  4. Linux高级编程--07.进程间通信
  5. 13个Cat命令管理文件实例汇总
  6. 【转】Hibernate和ibatis的比较
  7. POJ_3083——贴左右墙DFS,最短路径BFS
  8. 使用inpaint例子,去除水印
  9. C语言程序_管理系统
  10. Warning: connect.static is not a function
  11. 【Git】CentOS7 通过源码安装Git
  12. waf python build 工具使用流程
  13. LOJ-10100(割点个数)
  14. 使用Python+opencv2时的文件命名及路径问题
  15. 【Android】解决Android横竖屏切换数据丢失问题的方法
  16. 测试使用highlight.js的代码效果
  17. vue框架muse-ui官网文档主题错误毕竟【01】
  18. Current mirror drives multiple LEDs from a low supply voltage
  19. gcc __attribute__
  20. springMVC使用拦截器检查用户登录

热门文章

  1. HttpWatch使用教程
  2. Java类的加载、链接和初始化(个人笔记)
  3. #1560 : H国的身份证号码II(dp+矩阵快速幂)
  4. node.js 关于跨域和传递给前台参数
  5. debug_backtrace final catch
  6. Oracle DBA的学习(笔记)
  7. Connection cannot be null when &#39;hibernate.dialect&#39; not set
  8. 【转】 HMC与VIOS对新LPAR提供存储与网络虚拟化的支持
  9. C# 调用ArcGIS server admin api
  10. jquery生成二维码图片