题目描述:
输入一个链表,输出该链表中倒数第k个结点。
解法:
法一:利用栈来做,先进栈,再出栈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;
}
Stack<ListNode> stack = new Stack<ListNode>();
int countK = 0;
ListNode nodeK = null;
while(head != null){
stack.push(head);
head = head.next;
}
for(int i = 0;i < k;i++){
if(stack.isEmpty()){
return null;
}else if(i == k-1){
nodeK = stack.pop();
}else{
stack.pop();
}
}
return nodeK;
}
}
法二:利用栈来做,先进栈,再出栈k次。
采用双指针,让一个先走k步,第二个再开始走,当第一个走到结尾后,第二个指针就走到了倒数的第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) {
ListNode pMove = head;
int countK = 1;
//首先,pMove移动k次
while(countK < k && pMove != null){
pMove = pMove.next;
countK++;
}
//判断一下够不够k个数
if(countK != k || pMove == null){
return null;
}
//然后,head与pMove同时移动,直到pMove移动到最后一个结点
while(pMove.next != null){
pMove = pMove.next;
head = head.next;
}
//最后,head指向的就是倒数第k个结点
return head;
}
}