题目描述
输入一个链表,输出该链表中倒数第k个结点。
两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指正走k步,到达第k+1个节点。然后两个指针同时往后移动,当第一个结点到达末尾的下一个节点的时候,第二个结点所在位置就是倒数第k个节点了。。
package facehandjava.Linked;
public class KNode {
public static void main(String[] args) {
Node n6 = new Node(11,null);
Node n5 = new Node(9, n6);
Node n4 = new Node(7, n5);
Node n3 = new Node(5, n4);
Node n2 = new Node(3, n3);
Node n1 = new Node(1, n2);
// n6.setNext(n4);
System.out.println("++++++++++++链表++++++++++++");
Node now = n1;
while (now!= null) {
System.out.print(now.getVal()+",");
now = now.getNext();
}
int k = 3;
Node rev = KNode(n1,k);
System.out.println();
System.out.println("++++++++++++链表倒数第"+k+"个节点值是+++++++++++++++");
// while (rev != null) {
System.out.print(rev.getVal());
// rev = rev.getNext();
// }
}
public static Node KNode(Node node,int k) {
Node node1 = node;
Node node2 = node;
while (k> 0) {
node1 = node1.getNext();
k--;
}
while (node1!= null) {
node1 = node1.getNext();
node2 = node2.getNext();
}
return node2;
}
}