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

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

这个题的难点是几种特殊情况的判定

  • head==null
  • k < = 0;
  • k > 链表的长度

以及对算法的一些简单求解
方法一:

import java.util.*;
public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {

    Stack<ListNode> stack = new Stack<ListNode>();
        while(head != null){
            stack.push(head);
            head = head.next;
        }
        if(stack.size() < k || k == 0){
            return null;
        }
       
        for(int i = 0; i < k - 1; i++){
            stack.pop();
        }
        return stack.pop();
    }
}

利用栈的先进后出的特性进行求解。

方法二:

import java.util.*;
public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
        ListNode bHead = head;
        if(head == null || k <= 0){
            return null;
        }
        int first = 0;
        while(first != k){
            if(head == null){
                return null;
            }
            head = head.next;
            first++;
        }
        while(head != null){
            
            head = head.next;
            bHead = bHead.next;
        }
        return bHead;
    }
}

使用两个指针一个指针先向前移动k - 1个节点,然后第二个指针和第一个指针一起移动,当第一个指针走到末尾的时候,第一个指针也就走到了倒数第k个节点了
当以第一个指针到达第k - 1个节点的时候,剩下的节点数为size - k个节点。
倒数第k个几点也就是正数第 size - k个节点, 主要思路就是让一个指针能够从head开始走size - k次就到达了倒数第k个节点了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1...
    FlyElephant阅读 280评论 0 0
  • //leetcode中还有花样链表题,这里几个例子,冰山一角 求单链表中结点的个数----时间复杂度O(n)这是最...
    暗黑破坏球嘿哈阅读 1,551评论 0 6
  • 【声明】欢迎转载,但请保留文章原始出处→_→文章来源:http://www.jianshu.com/p/08d08...
    梦工厂阅读 3,790评论 3 31
  • 问题输入一个单向链表,输出该链表中倒数第k个节点,链表的倒数第0个节点为链表的尾指针。 解答设置两个指针 fast...
    豆志昂扬阅读 718评论 0 2
  • 2013年1月23日, 我给你写了第一篇文: 《你是我的独一我能否做你的无二》。 转眼几年过去,谢谢你...
    場皧眛阅读 211评论 0 1