求链表中倒数第k个节点

  • Post author:
  • Post category:其他



问题:

求链表中倒数第k个节点


结题思路:

用两个指针,第一个指针先走k-1步,然后两个指针一起走,当第一个指针走到尾节点的时候。第二个指针指向的就是倒数第k个节点。


先考虑可能存在的异常场景


1、链表为空

2、k值大于链表size

3、k值小于等于0


代码实现

public static String getKvalue(LinkedList<String> list){
        //控制台输入k值
        Scanner scanner = new Scanner(System.in);
        String next = scanner.next();
        try {
            Integer k = Integer.valueOf(next);
            if (null == list){
                throw new Exception("链表不能为空!");
            }
            if (k > list.size()){
                throw new Exception("k值大于链表总长!");
            }
            if (k <= 0){
                throw new Exception("k值必须大于0!");
            }
            //截取从k-1之后的新链表
            List<String> a = list.subList(k-1,list.size());
            Iterator<String> aIterator = a.iterator();
            Iterator<String> bIterator = list.iterator();
            String kValue = null;
			//使用while循环是因为执行完里边代码之后会再进行一次while里边的条件判断
            while (aIterator.hasNext()){
                aIterator.next();
                kValue = bIterator.next();
            }
            System.out.println(kValue);
            return kValue;

        }catch (NumberFormatException e){
            System.out.println("请输入阿拉伯数字!");
        }catch (Exception e){
            System.out.println(e.getMessage());
        }
        return null;
    }

    public static void main(String[] args) {
        LinkedList<String> strings = new LinkedList<String>();
        strings.add("a");
        strings.add("b");
        strings.add("c");
        strings.add("d");
        strings.add("e");
        strings.add("f");
        getKvalue(strings);

    }

测试结果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

主要是学习代码的实现思路,在写代码之前就应该考虑到测试用例,把所有的异常情况考虑到,写代码的时候把这种异常情况均进行处理。如果有什么问题的话欢迎一起探讨。



版权声明:本文为blitheW原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。