输入一个链表,输出该链表中倒数第k个结点
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
ListNode* p = pListHead;
ListNode* q = pListHead;
if (k == 0 || pListHead == NULL)
return NULL;
int i = 0;
for (; p != NULL; i++) {
if (i >= k)
q = q->next;
p = p->next;
}
return i < k ? NULL : q;
}
};
利用栈实现:Java实现思路:
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null||k<=0)
return null;
//1.借助栈来存储节点
Stack<ListNode> stack = new Stack<>();
while(head!=null){
stack.push(head);
head=head.next;
}
//判断k是否越界
if(k>stack.size())
return null;
//2.出栈来获取倒数第k个节点
while(k>1){
stack.pop();
k--;
}
return stack.pop();
}
}