题目描述
输入一个链表,输出该链表中倒数第k个结点。
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
解题思路:用两个指针,一个指针先走K步,如果链表长度大于K,则用另外一个指针指向头节点,然后两个指针同时移动,当前面的指针为空时,后面的指针指向的为所求。
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead ListNode类
* @param k int整型
* @return ListNode类
*/
public ListNode FindKthToTail (ListNode pHead, int k) {
// write code here
if(k<1||pHead==null) return null;
else{
ListNode pre=pHead;
ListNode real=null;
int number=1;
while(pre!=null){
if(number>=k){
real=pHead;
while(pre.next!=null){
pre=pre.next;
real=real.next;
}
return real;
}
pre=pre.next;
number=number+1;
}
return real;
}
}
}
下面的代码运行效率更高:
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead ListNode类
* @param k int整型
* @return ListNode类
*/
public ListNode FindKthToTail (ListNode pHead, int k) {
// write code here
if(k<1||pHead==null) return null;
else{
ListNode pre=pHead;
ListNode real=pHead;
int number=1;
while(pre!=null&&k>0){
pre=pre.next;
k--;
}
if(k>0) return null;
while(pre!=null){
real=real.next;
pre=pre.next;
}
return real;
}
}
}