import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead ListNode类
* @param k int整型
* @return ListNode类
*/
public ListNode FindKthToTail (ListNode pHead, int k) {
// write code here
LinkedList<ListNode> l=new LinkedList<>();
while(pHead!=null){
l.addLast(pHead);
pHead=pHead.next;
}
ListNode ans=null;
for(int i=k;k>0;k--){
if(!l.isEmpty())
ans=l.removeLast();
else
return null;
}
return ans;
}
}
就是用一个栈就可以了
方法二:
快慢指针
快指针先走k步,然后慢指针走,快指针到头的时候,慢指针是倒数第k个
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead ListNode类
* @param k int整型
* @return ListNode类
*/
public ListNode FindKthToTail (ListNode pHead, int k) {
// write code here
if(k==0)return null;
ListNode fast=null,slow=null,begin=pHead;
for (int i=0;i<k;i++){
fast=pHead;
if(pHead==null)
return null;
pHead=pHead.next;
}
slow=begin;
while(fast!=null){
fast=fast.next;
if(fast==null)
return slow;
else
slow=slow.next;
}
return slow;
}
}
还要考虑到k=0的情况下
应该返回空
本文介绍两种方法解决链表问题,一是使用栈实现,遍历链表并将节点存入栈,再取出第 k 个节点作为答案;二是采用快慢指针技巧,快指针先走 k 步,然后两者同步移动,当快指针到达尾部时,慢指针即为第 k 个尾节点。特别考虑了 k=0 的边界情况。
314

被折叠的 条评论
为什么被折叠?



