双指针思路(Java)
输出单向链表中倒数第k个结点
http://www.nowcoder.com/questionTerminal/54404a78aec1435a81150f15f899417d
用两个指针f,q同时指向链表头,让q先走k步,这样f,q之间相隔距离为k。最后再让f,q一起走,q走到末尾时,f的位置就是倒数第k个节点。
import java.util.Scanner;
class listNode{
int val;
listNode next;
public listNode(int val) {
this.val = val;
this.next = null;
}
}
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while (input.hasNext()) {
int n = input.nextInt();
listNode head = new listNode(-1);
listNode p = head;
for (int i = 0; i < n; i++) {
int val = input.nextInt();
p.next = new listNode(val);
p = p.next;
}
int k = input.nextInt();
//双指针
listNode f = head.next;
listNode q = head.next;
for (int i = 0; i < k; i++) {
q = q.next;
}
while (q != null) {
f = f.next;
q = q.next;
}
//特殊处理,虽然题目没有明确说明,但是不加过不了
if(f!=null&&k!=0){
System.out.println(f.val);
}else if(k==0){
System.out.println(0);
}else{
System.out.println();
}
}
}
}

