问题:
求链表中倒数第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 版权协议,转载请附上原文出处链接和本声明。