剑指 - 链表倒数第 K 个节点

链表中倒数第k个结点

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

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

题目

输入一个链表,输出该链表中倒数第k个结点。

思路

两种方案,不过空间复杂度都为 O(n),可以考虑一种计数后再次遍历,空间复杂度 O(1),但写起来比较麻烦,这里就记录比较容易实现和理解的两种方案了

public class LinkListKthNode {
    public ListNode FindKthToTail(ListNode head, int k) {
        if (head == null || k == 0) {
            return null;
        }
        return sol2(head, k);
    }

    //第一种方案 : 栈
    private ListNode sol1(ListNode head, int k) {
        Stack<ListNode> stack = new Stack<>();
        while (head != null) {
            stack.push(head);
            head = head.next;
        }
        if (stack.size() < k) {
            return null;
        }
        while (k > 1) {
            stack.pop();
            k--;
        }
        return stack.pop();
    }

    //第二种方案: 存下读取
    private ListNode sol2(ListNode head, int k) {
        ListNode p = head;
        ArrayList<ListNode> list = new ArrayList<>();
        while (p != null) {
            list.add(p);
            p = p.next;
        }
        if (list.size() < k) {
            return null;
        }
        return list.get(list.size() - k);
    }
}

总结

基础题,不用额外空间的写起来比较臃肿

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-01 10:56
点赞 评论 收藏
分享
Java抽象带篮子:简历怎么写可以看看我发的帖子,你的第一个是实习经历吗?那怎么写的是你的第一个练手项目呢?简历写的怎么样直接投小厂面试一下就知道了
没有实习经历,还有机会进...
点赞 评论 收藏
分享
下北澤大天使:你是我见过最美的牛客女孩😍
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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