思路先遍历整个链表得到长度,然后根据总长度和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;
|