思路先遍历整个链表得到长度,然后根据总长度和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) { int length = 0; int temp=0; ListNode cur = head,curindex=head; while(cur!=null){ cur=cur.next; length++; } temp=length-k; if(head==null || k>length) return null; while(temp>0){ curindex=curindex.next; temp--; } return curindex; } }
思路二 利用两个指针 类似于快慢指
ListNode pre=null,p=null;
//两个指针都指向头结点
p=head;
pre=head;
//记录k值
int a=k;
//记录节点的个数
int count=0;
//p指针先跑,并且记录节点数,当p指针跑了k-1个节点后,pre指针开始跑,
//当p指针跑到最后时,pre所指指针就是倒数第k个节点
while(p!=null){
p=p.next;
count++;
if(k<1){
pre=pre.next;
}
k--;
}
//如果节点个数小于所求的倒数第k个节点,则返回空
if(count<a) return null;
return pre;
|