题目描述
输入一个链表,输出该链表中倒数第k个结点。
快指针和慢指针法:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null)
return null;
if(k<1)
return null;
ListNode ln=head;
for(int i=0;i<k-1;i++){
if(head.next==null)
return null;
head=head.next;
}
while(head.next!=null){
head=head.next;
ln=ln.next;
}
return ln;
}
}
栈法:
相比较先遍历一遍确定长度,然后再找倒数第k个数这种算法,时间复杂度其实是差不多的,但是压栈和弹栈速度却比寻址要快得多。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
import java.util.Stack;
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null)
return null;
if(k<1)
return null;
Stack<ListNode> stack=new Stack();
while(head!=null){
stack.push(head);
head=head.next;
}
for(int i=k;i>1;i--){
stack.pop();
if(stack.isEmpty())
return null;
}
return stack.pop();
}
}