双指针思路(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(); } } } }