剑指offer 22
题目:
输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。
如果该链表长度小于k,请返回一个长度为 0 的链表。
方法一:栈
暴力将节点全部压进栈中,
由于栈是头插头取,后进先出,顺序正好颠倒;
求第k个,就pop()出k次即为结果;
public class Solution {
public ListNode FindKthToTail (ListNode head, int k) {
ListNode r=null;
// base case
if(head==null){
return r;
}
Stack<ListNode> s=new Stack<>();
ListNode curr=head;
while(curr!=null){
s.push(curr);
curr=curr.next;
}
// 当k大于节点个数时!
if(k>s.size()){
return r;
}
// 弹出k次级为倒数第k个节点;
for(int i=0;i<k;i++){
r=s.pop();
}
return r;
}
}