链表中倒数第K个数

解题思路

  为了能够只遍历一次就能找到倒数第k个节点,可以定义两个指针:

  (1)第一个指针从链表的头指针开始遍历向前走k-1,第二个指针保持不动

  (2)从第k步开始,第二个指针也开始从链表的头指针开始遍历

  (3)由于两个指针的距离保持在k-1,当第一个(走在前面的)指针到达链表的尾结点时,第二个指针(走在后面的)指针正好是倒数第k个结点。

           当我们用一个指针遍历链表不能解决问题的时候,可以尝试用两个指针来遍历链表。可以让其中一个指针遍历的速度快一些(比如一次在链表上走两步),或者让它先在链表上     走若干步。

   另外还要注意链表为空和K为0的情况

问题描述

  输入一个链表,输出该链表中倒数第k个结点

代码实现

 1 /*
 2 public class ListNode {
 3     int val;
 4     ListNode next = null;
 5 
 6     ListNode(int val) {
 7         this.val = val;
 8     }
 9 }*/
10 public class Solution {
11     public ListNode FindKthToTail(ListNode head,int k) {
12         ListNode first = head;
13         ListNode last = head;
14         if(head==null||k==0){
15             return null;
16         }
17         for(int j=0; j<k-1; j++){
18             if(first.next!=null){
19                 first = first.next;
20             }
21             else{
22                 return null;
23             }
24         }
25         while(first.next != null){
26             first = first.next;
27             last = last.next;
28         }
29         return last;
30     }
31 }
原文地址:https://www.cnblogs.com/wanglinyu/p/8516846.html