链表中倒数第k个结点
题目描述:
输入一个链表,输出该链表中倒数第k个结点。
思路分析:
1.将链表全部放入栈,再弹出第k个结点;
public ListNode FindKthToTail(ListNode head,int k) {
Stack<ListNode> stack = new Stack<ListNode>();
ListNode node = head;
while(node != null){
stack.push(node);
node = node.next;
}
if(k==0||k>stack.size()){
return null;
}
while(--k > 0){
stack.pop();
}
return stack.pop();
}
2.遍历所有结点,再取第size-k+1个结点;
public ListNode FindKthToTail(ListNode head,int k) {
int size = 0;
ListNode node = head;
while(node != null){
node = node.next;
size++;
}
if(k==0||k>size){
return null;
}
int pk = size-k+1;
node = head;
while(--pk > 0){
node= node.next;
}
return node;
}
3.设定两个指针,前一个比后一个领先k个结点,当前一个到达最后一个结点时,后一个指向的就是倒数第k个结点。
public ListNode FindKthToTail(ListNode head, int k) {
int count = 0;
ListNode nodePre = head;
ListNode nodePk = head;
while (nodePre != null) {
if (count >= k) {
nodePk = nodePk.next;
//当前一个结点比后一个结点领先k个后,后个结点开始遍历
}
nodePre = nodePre.next;
count++;
}
if (k == 0 || k > count) {
return null;
}
return nodePk;
}