不用快慢指针
链表中倒数第k个结点
http://www.nowcoder.com/questionTerminal/529d3ae5a407492994ad2a246518148a
看到这种题,一个很典型的想法是用快慢指针。
但其实也可以从头到尾计算链表长度len,再根据这个结果从头直接找到我们需要的节点len-k。
两者需要在链表上面跑的路程都是一样的。
前者多生成一个ListNode对象,后者多生成一个整型变量len。
另外记得讨论特殊情况
- head==null
- k<=0
- len<k
这里的k是不用对len取整的!
public class Solution { public ListNode FindKthToTail(ListNode head,int k) { if(head==null||k==0) return null; int len=1; ListNode p=head; while(head.next!=null){ head=head.next; len++; } if(len<k) return null; k=(len-k)%len; head=p; while(k!=0) { head=head.next; k--; } return head; } }