思路:
如图所示:这个题的灵魂就是求出 length-k,求出length-k 就相当于知道了倒数k的值。
先遍历k长度,到达a点,剩下的长度就是 length-k。然后同时遍历 m, n 两个链表,那么m遍历结束的时候,n链表刚好到达b点 即倒数k的位置。
代码:
public Entry<E> getKOfLink(int k){
//说明:Entry就是定义的链表的节点。
// size() 方法是求 链表长度的方法。
// first 代表头结点。
int linkLength = size();
if(k <= 0 || k > linkLength){
return null;
}
//先遍历k长度的m链表
Entry<E> m = first;
int count = 0;
for(;count != k;m=m.next){
count++;
}
//然后 m n 链表同时遍历。
Entry<E> n = first;
while(m != null){
m=m.next;
n=n.next;
}
//n保存倒数第k个节点
return n;
}