输入一个链表,输出该链表中倒数第k个结点。
思路1:首先想到的是栈,先进后出,将链表全部压入栈,倒数第k个就是从栈中第k个出来的。已AC
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
import java.util.*;
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
Stack<ListNode> stack=new Stack<ListNode>();
int i,count=0;
if(head==null||k==0 )
{
return null;
}
while(head!=null)
{
stack.push(head);
head=head.next;
count++;
}
if(count<k)
return null;
for(i=0;i<k-1;i++)
stack.pop();
head=stack.pop();
return head;
}
}
思路2:看了题解的思路,快慢指针,快指针先走k个单位之后快慢指针一起走,当快指针走到头时,慢指针正好到倒数第k个单位;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
import java.util.*;
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
ListNode prefast=head;
ListNode preslow=head;
int i,count=0;
if(head==null||k==0)
return null;
while(head!=null)
{
head=head.next;
count++;
}
if(count<k)
return null;
for(i=0;i<k;i++)
prefast=prefast.next;
while(prefast!=null)
{
prefast=prefast.next;
preslow=preslow.next;
}
return preslow;
}
}