剑指offer——倒数第k个节点

先走k-1步,然后判断fast有没有到空为止.

/*
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 fast=head;
        ListNode slow=head;

        for(int i=1;i<k;i++)
        {
            if(fast.next!=null)
            {
                fast=fast.next;
            }
            else
            {
                return null;
            }
        }

        while(fast.next!=null)
        {
            fast=fast.next;
            slow=slow.next;
        }
        return slow;

    }
}

原文地址:https://www.cnblogs.com/wangyufeiaichiyu/p/11073793.html

时间: 2024-10-08 00:59:14

剑指offer——倒数第k个节点的相关文章

剑指Offer:删除链表的节点【18】

剑指Offer:删除链表的节点[18] 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 题目分析 如上图所示,我们的定义了三个指针,其中第二.三个指针用于找到重复元素的第一个位置和最后一个位置的下一个位置,然后第一个指针的下一个指向三个指针,这样就跳过了重复元素. 但是编码发现后,还有两种情况欠考虑. 这种情况,刚开始,就是

剑指offer | 最小的K个数

题目描述:输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 题目解析:首先想到的就是插入法,.改进一下就是前面一直保持7个有序数字.遍历剩下数组,元素若小于最大值就交换.用C++的set来解决代码就简洁多了,删除插入都是logk. 代码如下: 1 class Solution { 2 public: 3 vector<int> GetLeastNumbers_Solution(vector<int> inpu

python剑指offer最小的K个数

题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 思路: 使用快排中的partition思想. ①我们设定partition函数的哨兵为key=lists[left],在partition函数中完成一轮比较的结果是,比key大的数都在其右边,比key小的数放在其左边.完成该轮后返回其left=right时left的值. ②我们判断left的值是比k大还是小: 如果left的值比k大,说明上轮partition之

剑指offer:删除链表的节点

# -*- coding: utf-8 -*- # @Time : 2019-04-19 21:21 # @Author : Jayce Wong # @ProjectName : job # @FileName : deleteNode.py # @Blog : https://blog.51cto.com/jayce1111 # @Github : https://github.com/SysuJayce # Definition for singly-linked list. class

剑指offer:链表的中间节点

给定一个链表的表头,如果链表节点数为奇数则返回中间的节点,否则返回中间两个节点的任意一个 # -*- coding: utf-8 -*- # @Time : 2019-04-23 17:24 # @Author : Jayce Wong # @ProjectName : job # @FileName : findMidNode.py # @Blog : https://blog.51cto.com/jayce1111 # @Github : https://github.com/SysuJay

剑指Offer——二叉树的下一个节点

1.题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 2.代码实现 /* public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; 指向父节点 TreeLinkNode(int val) { this.val = val; } }

【剑指offer】链表倒数第k个节点

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25662121 在Cracking the Code Interview上做过了一次,这次在九度OJ上测试,AC. 题目描述: 输入一个链表,输出该链表中倒数第k个结点.(hint: 请务必使用链表.) 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为两个整数n和k(0<=n<=1000, 0<=k<=1000):n代表将要输入的链表元素的

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

题目描述 输入一个链表,输出该链表中倒数第k个结点. 解题思路 使用快慢指针法,让快指针先走k步,然后再让慢指针开始走,当快指针到达链表尾部时,慢指针刚好到达倒数第k个节点. C++代码实现: /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindKthToTail(ListN

剑指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(