思路是使用兩個指針,第一個指針先走k-1步,然後兩個指針一起走,當第一個指針走到結尾的時候,第二個指針指向的就是倒數第K個結點。
class MyNode{
int value;
MyNode next;
MyNode(int value){
this.next = null;
this.value = value;
}
}
/**
* @author David
* 求鏈表的倒數第k個節點
*/
public class Example4 {
public static void main(String[] args) {
//初始化鏈表
MyNode Node1 = new MyNode(1);
MyNode Node2 = new MyNode(2);
MyNode Node3 = new MyNode(3);
MyNode Node4 = new MyNode(4);
MyNode Node5 = new MyNode(5);
MyNode Node6 = new MyNode(6);
MyNode Node7 = new MyNode(7);
MyNode Node8 = new MyNode(8);
Node1.next = Node2;
Node2.next = Node3;
Node3.next = Node4;
Node4.next = Node5;
Node5.next = Node6;
Node6.next = Node7;
Node7.next = Node8;
new Example4().fun(Node1, 11);
}
private void fun(MyNode first, int k){
MyNode head = first;
MyNode tail = first;
int length = 0;
while(head!=null){
head = head.next;
length++;
}
head = first;
System.out.println(length);
if(k!=0&&k<length){
for(int i=0; i<k; i++){
head = head.next;
}
while(head!=null){
head = head.next;
tail = tail.next;
}
System.out.println(tail.value);
}else{
System.out.println("input error");
}
}
}