面试题23-链表中倒数第K个节点

题目要求

现在有一个链表,要求得到倒数第K节点的值。

题目解析

思路一:

  • 分析

题目要求得到倒数第k个值,那么我们可以选用一个辅助缓存,辅助计数器
当遍历的位置到达第k个的时候,将头结点存入辅助缓存,从此与遍历一同前进,
当遍历到尾节点的时候,辅助缓存就是倒数第k个。

  • 代码段
public static int getReverseOrderOfK(ListNode listNode , int k) throws Exception {
        
        ListNode temp = listNode ;
        int count = 0 ;
        
        if(k<0) {
            throw new Exception("检索值不能为负数") ;
        }
        
        if(listNode == null ) {
            throw new Exception("链表为空") ;
        }
        
        while(listNode != null && listNode.getNext() != null ) {
            
            listNode = listNode.getNext() ;
            count ++ ;
            if( count > k -1 ) {
                temp = temp.getNext() ;
            }
            System.out.println(temp.getValue() + "与" + listNode.getValue());
        }
        
        if(count < k-1 ) {
            throw new Exception("链表长度小于" + k) ;
        }
        
        return temp.getValue()  ;
    }

测试代码

public static void main(String[] args) throws Exception {
        
        ListNode node1 = new ListNode() ;
        ListNode node2 = new ListNode() ;
        ListNode node3 = new ListNode() ;
        ListNode node4 = new ListNode() ;
        ListNode node5 = new ListNode() ;
        
        node1.setValue(1);
        node2.setValue(2);
        node3.setValue(3);
        node4.setValue(4);
        node5.setValue(5);
        
        node1.setNext(node2);
        node2.setNext(node3);
        node3.setNext(node4);
        node4.setNext(node5);
        
        System.out.println(getReverseOrderOfK(node1 , 3));
        System.out.println(getReverseOrderOfK(node1 , 5));
        System.out.println(getReverseOrderOfK(node1 , 0));
        System.out.println(getReverseOrderOfK(node1 , 6));
        
    }
    

运行结果

1与2
1与3
2与4
3与5
3
1与2
1与3
1与4
1与5
1
2与2
3与3
4与4
5与5
5
1与2
1与3
1与4
1与5
Exception in thread "main" java.lang.Exception: 链表长度小于6
at 链表中倒数第K个节点的值.Demo.getReverseOrderOfK(Demo.java:40)
at 链表中倒数第K个节点的值.Demo.main(Demo.java:69)


看完整源码戳源码地址

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

推荐阅读更多精彩内容

  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 3,757评论 0 11
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,803评论 18 399
  • 问题输入一个单向链表,输出该链表中倒数第k个节点,链表的倒数第0个节点为链表的尾指针。 解答设置两个指针 fast...
    豆志昂扬阅读 719评论 0 2
  • 转载请注明出处://www.greatytc.com/p/c65d9d753c31 在上一篇博客《数据结构...
    Alent阅读 3,542评论 4 74
  • 构建知识体系 @(方法论) [toc] 一、才能的分类 一、才能的分类才能的分类:街头智慧和科学方法1.一类是没看...
    路Promenade阅读 2,525评论 0 9