不用快慢指针

链表中倒数第k个结点

http://www.nowcoder.com/questionTerminal/529d3ae5a407492994ad2a246518148a

看到这种题,一个很典型的想法是用快慢指针。
但其实也可以从头到尾计算链表长度len,再根据这个结果从头直接找到我们需要的节点len-k。
两者需要在链表上面跑的路程都是一样的。
前者多生成一个ListNode对象,后者多生成一个整型变量len。

另外记得讨论特殊情况

  1. head==null
  2. k<=0
  3. 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;
    }
}
全部评论

相关推荐

02-15 22:29
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务