剑指offer-- 链表中倒数第K个结点

链表中倒数第k个结点

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

解法1

用一个p指针指向 head 然后 一直遍历到末尾,得到链表长度len 计算出你自己需要遍历的长度 len-k ;然后在遍历len-k个结点 就得到了倒数第k个结点

/*
 运行时间:14ms 占用内存:9720KB
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
        ListNode p = head;
        int len = 0;
        while(p!=null){
            p = p.next;
            len++;
        }
        if(len<k){
            return null;
        }else{
            int num = len - k;
            while(num>0){
                head = head.next;
                num --;
            }
            return head;
        }
    }
}

解法2

用两个指针记住头结点 ,一个指针先走k步 ,第二个指针在和第一个指针一起走,直到第一个指针走到了null,那么第二个指针就是倒数第K个结点

/*
运行时间:13ms 占用内存:9620KB
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
        ListNode p = head;
        ListNode q = head;
        while(k>0){
            if(p != null)
                p = p.next;
            else{
                return null;   
            }
            k--;
        }
        while(p != null){
            p = p.next;
            q = q.next;
        }
        return q;
    }
}
全部评论

相关推荐

04-02 10:09
门头沟学院 Java
用微笑面对困难:这里面问题还是很多的,我也不清楚为啥大家会感觉没啥问题。首先就是全栈开发实习9个月的内容都没有java实习生的内容多,1整个技术栈没看出太核心和难点的内容,感觉好像被拉过去打杂了,而且全栈基本上很容易被毙。里面能问的bug是在太多了比如L:继承 BaseMapper 可直接使用内置方法’。请问你的 BaseMapper 是如何扫描实体类注解如果瞬时产生 100 个上传任务,MySQL 的索引设计是否会有瓶颈?你做过分库分表或者索引优化吗?全栈的内容可以针对动态难点去搞,技能特长写在下面吧,你写了这么多技能,项目和实习体现了多少?你可以在项目里多做文章然后把这个放下去,从大致来看实习不算太水,有含金量你也要写上内容针对哨兵里面的节点变化能问出一万个问题,这个很容易就爆了。
提前批简历挂麻了怎么办
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务