链表中倒数第k个结点

题目描述

  输入一个链表,输出该链表中倒数第k个结点。


思路

  1. 两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指正走(k-1)步,到达第k个节点;
  2. 然后两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了。
  3. 本题考察鲁棒性,因此要判断空值和负值以及k值不能超过链表的长度。
  4. 本题链表不含头结点。

实现代码

// Node用来标识结点,element用来保存节点上的数据,next用来保存指向下一个节点的链接
function Node(element) {
this.element = element;
this.next = null;
} /* 在Node的原型链上添加insert方法,
判断链表是否为空,若为空,则在添加第一个结点,
若不为空,则在当前结点后面添加新的结点。*/
Node.prototype.insert = function(newElement) {
if (this.element === undefined) {
this.element = newElement;
} else {
var curNode = this;
while (curNode.next !== null) {
curNode = curNode.next;
}
var newNode = new Node(newElement);
curNode.next = newNode;
newNode.next = null;
}
}; // 查找链表中倒数第k个结点
function FindKthToTail(head, k) {
if (head.element === undefined) {
return new Error("head为空链表!");
}
if (k <= 0) {
return new Error("k小于等于0!");
}
var pre = head;
var last = head;
for (var i = 1; i < k; i++) {
if (pre.next !== null) {
pre = pre.next;
} else {
return new Error("k值过大!");
}
}
while (pre.next !== null) {
pre = pre.next;
last = last.next;
}
return last;
} var node = new Node();
node.insert("Kobe");
node.insert("Curry");
node.insert("Russel");
node.insert("Klay");
node.insert("Tracy");
console.log(node);
var empty = {};

举例

FindKthToTail(node, -2);



FindKthToTail(empty , 2);



FindKthToTail(node, 100);

FindKthToTail(node, 2);

《剑指offer》— JavaScript(14)链表中倒数第k个结点的更多相关文章

  1. 剑指offer四:链表中倒数第k个结点

    输入一个链表,输出该链表中倒数第K个结点 public class ListNode { int val; ListNode next = null; ListNode(int val) { this ...

  2. 【剑指offer】22. 链表中倒数第k个节点

    剑指 Offer 22. 链表中倒数第k个节点 知识点:链表:双指针 题目描述 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例 ...

  3. 剑指offer-面试题15.链表中倒数第k个结点

    题目:输入一个链表,输出该链表的倒数第K个结点.为了符合大多数人的习惯,本题 从1开始计数,即链表的尾结点是倒数第1个节点.例如有一个链表有6个节点,从 头节点开始他们的值依次是1,2,3,4,5,6 ...

  4. 剑指offer 14. 链表中倒数第 k 个结点

    14. 链表中倒数第 k 个结点 题目描述 输入一个链表,输出该链表中倒数第k个结点 法一:快慢指针 快指针先走 k 步,等快指针到达尾部时,慢指针所指结点即是倒数第 k 个结点 public cla ...

  5. 剑指Offer 14. 链表中倒数第k个结点 (链表)

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 题目地址 https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?t ...

  6. 剑指offer 15:链表的倒数第k个节点

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 解题思路 使用快慢指针法,让快指针先走k步,然后再让慢指针开始走,当快指针到达链表尾部时,慢指针刚好到达倒数第k个节点. C++代码实现: /* ...

  7. 14链表中倒数第k个结点

    题目描述 输入一个链表,输出该链表中倒数第k个结点.   思路: 快慢指针 快指针 先走k 步, 然后快慢指针一起走 当快指针走到null 时, 慢指针就是所求的倒数第k个节点 tips: 判断k是否 ...

  8. 14.链表中倒数第k个结点 Java

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路 快指针和慢指针,快指针先跑K个单位然后慢指针开始跑,快指针跑到最后一个节点的时候慢指针对应的就是链表中倒数第k个结点 public stat ...

  9. [剑指Offer] 14.链表中倒数第k个结点

    [思路]利用两个相隔为k-1个结点的指针进行遍历,当后一个指针移到末尾时,前一个指针就是要求的结点. /* struct ListNode { int val; struct ListNode *ne ...

随机推荐

  1. zepto 添加 animate组件

    今天发现JQuery可以用 animate方法回到顶部,心想着zepto应该也可以 $('html,body').animate({ scrollTop: 0 }, 1000); 于是便用了一下,发现 ...

  2. BZOJ 1901 Zju2112 Dynamic Rankings 树状数组套线段树

    题意概述:带修改求区间第k大. 分析: 我们知道不带修改的时候直接上主席树就可以了对吧?两个版本号里面的节点一起走在线段树上二分,复杂度是O((N+M)logN). 然而这里可以修改,主席树显然是凉了 ...

  3. python中 try、except、finally 的执行顺序

        def test1(): try: print('to do stuff') raise Exception('hehe') print('to return in try') return ...

  4. 团队作业the end

    GitHub 王德钊 李镇平 陈启昌 黄益颂 汪倍民 演示动态图:为避免现场演示翻车,各个团队需要给出项目各个功能点运行的git图. 还在肝: 分工协作:团队的成员如何分工协作的?对项目的贡献如何(用 ...

  5. Alpha 冲刺8

    队名:日不落战队 安琪(队长) 今天完成的任务 登录的数据post. okhttp学习第二弹. 明天的计划 okhttp学习第三弹. 个人信息界面数据get. 还剩下的任务 个人信息数据get. 遇到 ...

  6. Spring1()

    目的: 降低Java开发的复杂性 使用策略: 基于POJO的轻量级和最小侵入式的编程 通过依赖注入和面向接口实现松耦合 基于切面和惯例进行声明式编程 通过切面和模版减少样式代码 依赖注入:由Sprin ...

  7. linux桌面使用鼠标中间健粘帖

    使用linux桌面很久了,一直习惯鼠标左键选中,右健弹出菜单复制粘帖. 没想到linux使用鼠标中间健粘帖,很方便. 参考:Linux鼠标中键复制粘贴之谜[Felix蛋疼科普贴] 用鼠标左键单击待复制 ...

  8. 软件工程个人作业3——集大通APP案例分析

    第一部分:调研, 评测 1.第一次上手体验 主要界面截图: 感受: 1.界面不美观: 2.特色功能展现模块不突出,以上截图为打开APP所看到的界面展示,但是这些功能都不是该APP的特色功能,显得有些累 ...

  9. Oracle数据库表空间常用操作

    1. 查看所有表空间大小 SQL> select tablespace_name,sum(bytes)/1024/1024 from dba_data_files group by tables ...

  10. docker-py execute echo无效

    错误写法: cli.execute('9b2606a50304','echo "bibo">/tmp/1.txt')   争取写法: cli.execute('9b2606a ...