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

https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId=13&tqId=11167&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&tPage=1

题意

分析

方法一:

可以使用尺子

注意边界条件的判断,就是如果是空的话会怎么样就是k的长度甚至不够会怎么样。

代码

/*

public class ListNode {

int val;

ListNode next = null;

ListNode(int val) {

this.val = val;

}

}*/

public class Solution {

public ListNode FindKthToTail(ListNode head,int k) {

if(head == null||k<=0)return null;

//创建尺子,移动后面的指针

ListNode pre = head;

ListNode last = head;

for(int i=1;i<k;i++){//因为要求尺子的长度为k那么就要移动k-1个位置

if(last.next !=null)last=last.next;

else return null;//否则说明链表的长度都还不到k,直接返回null

}

//开始移动尺子

while(last.next!=null){

last = last.next;

pre = pre.next;

}

return pre;

}

}

原文地址:https://www.cnblogs.com/buptyuhanwen/p/9377027.html

时间: 2024-08-08 11:32:08

剑指offer---14---链表中倒数第k个结点的相关文章

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

题目描述 输入一个链表,输出该链表中倒数第k个结点. 题目地址 https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId=13&tqId=11167&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 思路 三个特例:如果输入的链表为空:k大于链表的长度:k为0的情况.对于正常情况,设置两个指针分

【Java】 剑指offer(22) 链表中倒数第k个结点

正文 本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点.例如一个链表有6个结点,从头结点开始它们的值依次是1.2.3.4.5.6.这个链表的倒数第3个结点是值为4的结点. 思路 第一直觉是先从头开始遍历,计算链表个数n,然后重新遍历,第n-k+1个结点即为所需要的结点.但是需要遍历2次.后面采用了栈进行实现该

【剑指OFFER】链表中倒数第k个结点

[问题描述] 输入一个链表,输出该链表中倒数第k个结点. 时间限制:1秒 空间限制:32768K [AC代码] p先走k步,q再走,这样p和q的距离就是k了,等p走到尽头,那么q自然就到了倒数第k个位置了. 1 /* 2 public class ListNode { 3 int val; 4 ListNode next = null; 5 6 ListNode(int val) { 7 this.val = val; 8 } 9 }*/ 10 public class Solution { 1

剑指OFFER之链表中倒数第k个结点

题目描述: 输入一个链表,输出该链表中倒数第k个结点.(hint: 请务必使用链表.) 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为两个整数n和k(0<=n<=1000, 0<=k<=1000):n代表将要输入的链表元素的个数,k代表要查询倒数第几个的元素.输入的第二行包括n个数t(1<=t<=1000000):代表链表中的元素. 输出: 对应每个测试案例,若有结果,输出相应的查找结果.否则,输出NULL. 样例输入: 5 2 1

剑指OFFER之链表中倒数第k个节点(九度OJ1517)

题目描述: 输入一个链表,输出该链表中倒数第k个结点.(hint: 请务必使用链表.) 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为两个整数n和k(0<=n<=1000, 0<=k<=1000):n代表将要输入的链表元素的个数,k代表要查询倒数第几个的元素.输入的第二行包括n个数t(1<=t<=1000000):代表链表中的元素. 输出: 对应每个测试案例,若有结果,输出相应的查找结果.否则,输出NULL. 样例输入: 5 2 1

剑指offer:链表中倒数第k个节点

题目描述输入一个链表,输出该链表中倒数第k个结点. class ListNode: def __init__(self, x): self.val = x self.next = None class Solution: def FindKthToTail(self, head, k): # 由于k是从1开始的,因此需要特殊处理空链表和k<1的情况 if not head or k < 1: return None fast = head # 快指针先走k-1步 for _ in range(

剑指offer系列12---链表倒数第k个结点

[题目]输入一个链表,输出该链表中倒数第k个结点. [思路]方法3:设置两个指针,第一个指针先走k-1步,第2个指针开始走,(这时候第一个指针指向第k个)当第一个指针走到尾部时(即走了k步),第一个指针即指向第k个结点.(推荐的方法) 方法2:先获取结点个数,再顺数第n-k+1个结点 1 2 3 4 5 6 方法1:先获取长度,再复制至数组一中,再反序加至数组2中,这时候要输出倒数第K个数即为数组2中的顺数第k-1个数.此处出现的异常不知道该怎么处理.(我的方法) 1 package com.e

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

题目描述 输入一个链表,输出该链表中倒数第k个结点. 题目解答 方法一: /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode FindKthToTail(ListNode head,int k) { if(head==null || k<1){ return null;

【剑指Offer】14、链表中倒数第k个结点

题目描述 输入一个链表,输出该链表中倒数第k个结点. 题解一:栈 1 public static ListNode FindKthToTail(ListNode head,int k) { 2 if(head==null||k<=0){ 3 return null; 4 } 5 Stack<ListNode> stack = new Stack<>(); 6 while (head!=null){ 7 stack.push(head); 8 head=head.next; 9

剑指Offer面试题15(Java版):链表中倒数第K个结点

题目: 输入一个链表,输出该链表中倒数第k哥结点. 为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点. 例如一个链表有6个结点,从头结点开始它们的值依次是1,2,3,4,5,6.这个链表的倒数第3个结点是值为4的结点 为了得到第K个结点,很自然的想法是先走到链表的尾端,再从尾端回溯K步.可是我们从链表结点的定义可疑看出本题中的链表 是单向链表,单向链表的结点只有从前往后的指针而没有从后往前的指针,因此这种思路行不通. 既然不能从尾节点开始遍历这个链表,我们还是把思路回到头