2020.05.03
题目:
输入一个链表,输出该链表中倒数第k 个结点.为了
符合大多数人的习惯,本题从1 开始计数,即链表的尾结点是倒数第1 个结点.例如一个链表有6 个结点,从头结点开始它们的值依次是1 、2、3、4、5 、6。这个个链表的倒数第3 个结点是值为4 的结点。
点击链接
解题思路:
和剑指offer14思想惊人的相似,首先定义两个指针一个指向头结点,一个先走倒数第几个节点减一步。然后遍历第二个结点到尾部,遍历时两个结点同时往后移,即可。今天的健壮代码写了如果获取当前和调用方法名方法,分享一下。
package offer15;
class Node{
int value;
Node nextNode;
public Node(int value) {
this.value = value;
}
public Node() {
}
}
public class Test {
public static void main(String[] args) {
Node headNode = new Node(1);
headNode.nextNode = new Node(2);
headNode.nextNode.nextNode = new Node(3);
headNode.nextNode.nextNode.nextNode = new Node(4);
headNode.nextNode.nextNode.nextNode.nextNode = new Node(5);
headNode.nextNode.nextNode.nextNode.nextNode.nextNode = new Node(6);
find(headNode,2);
find(null,2);
}
public static void find(Node headNode,int k) {
if(headNode == null || k < 1) {
throw new RuntimeException("当前方法:"+new Exception().getStackTrace()[0].getMethodName() +"调用方法:" + new Exception().getStackTrace()[1].getMethodName() + "\t输入参数不合法");
}
Node printNode = headNode;
Node endNode = headNode;
for (int i = 1; i < k; i++) {
endNode = endNode.nextNode;
}
while (endNode.nextNode!=null) {
printNode = printNode.nextNode;
endNode = printNode.nextNode;
}
System.out.println(printNode.value);
}
}