自己拿到手首先想的是递归,最终提交的时候可以通过量小的例子,在大数据量的链表会发生堆栈越界报错。以下为代码:
import java.util.*; public class Solution { int i=1; //判断当前节点是倒数第几个 ListNode ls=null; //返回的头点 public ListNode FindKthToTail (ListNode pHead, int k) { // write code here if(ls!=null) return ls; if(pHead!=null&&pHead.next!=null){ FindKthToTail(pHead.next,k); i++; if(i==k) {ls=pHead; return ls;} } return ls; } }
这个空间复杂度太高了,,,
另一种奇怪的方法
设置快慢指针。快指针先走k步,要是走过头了就返回空,否则就设置慢指针为头结点,然后俩指针一起走,直到快指针为空,此时的慢指针所指就是倒数第k节点(因为快慢指针永远相差k个,快的到头了,慢的也就是倒数第k)
代码如下:
import java.util.*; public class Solution { public ListNode FindKthToTail (ListNode pHead, int k) { // write code here ListNode fast=pHead; ListNode low=pHead; int i=1; while(i<=k){ if(fast==null) {return null;} //一定注意特殊情况 fast=fast.next; i++; } while(fast!=null){ fast=fast.next; low=low.next; } return low; } }
爱小宋!!!!!!!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)