public ListNode FindKthToTail(ListNode head,int k) {
if(head == null || k<=0)
return null;
Stack<ListNode> stack = new Stack<ListNode>();
stack.add(head);
while(head.next != null){
head = head.next;
stack.add(head);
}
ListNode knode = null ;
for(int i = 0;i<k ;i++){
knode = stack.pop();
}
return knode ;
}
//定义两个指针,一个先走k-1步,然后一起走,当先走的指针到达终点时,
//第二个指针到达链表的到数第k个节点。
public ListNode FindKthToTail_1(ListNode head,int k) {
if(head == null || k== 0){
return null;
}
ListNode pahead = head ;
ListNode pbebind = null ;
for(int i = 0 ;i<k-1;++i){
if(pahead.next != null){
pahead = pahead.next;
}else{
return null;
}
}
pbebind = head ;
while(pahead.next != null){
pahead = pahead.next;
pbebind = pbebind.next;
}
return pbebind;
}
当我们用一个指针遍历链表不能解决问题的时候,可以尝试用两个指针来遍历链表,可以让其中一个指针遍历的速度快一些(比如一次在链表上走上两步),或者让他先在链表上走上若干步