美文网首页
剑指 offer 笔记 14 | 链表中倒数第k个结点

剑指 offer 笔记 14 | 链表中倒数第k个结点

作者: ProudLin | 来源:发表于2019-06-16 23:47 被阅读0次

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

    描述分析
    这道题涉及代码鲁棒性,所谓鲁棒性就是健壮性,是否能对异常条件处理妥当,简单地说就是要考虑,代码再特殊条件下能否正常运行,而不是崩溃。

    题目描述,其实隐藏着另一个条件,即链表中节点的个数不能大于 K。假设我们输入的 K 大于链表的节点,那么该怎么处理?

    假如我们输入的节点依次为 1、2、3、4、5、6 那么倒数第 2 个节点为 5 节点。而且这道题要求只遍历一次,找到倒数第 K 个节点。

    我们可以定义两个指针,第一个指针 p1 ,从链表头指针开始走 k-1 步,第二个指针p2 保持不动;

    到第 k 步开始,p2 也从链表头指针开始遍历,两个指针的距离保持 k -1 步,当 p1 到达链表尾节点时,p2 指针正好指向倒数第 k 个节点。

    代码分析

    public class Solution {
        public ListNode FindKthToTail(ListNode head,int k) {
            if(head == null || k == 0){
                return null;
            }
            ListNode pA = head;
            ListNode pB = null;
            
            for(int i = 0; i < k-1; i++){
                if(pA.next != null){
                    pA = pA.next;
                }else{
                    return null;
                }
            }
            
            pB = head;
            while(pA.next != null){
                pA = pA.next;
                pB = pB.next;
            }
            return pB;
        }
    }
    

    1)要考虑链表为空的情况;
    2)考虑当 k 输入为 0 的情况;
    3)考虑 k 如果大于链表长度时;

    参考文献:《剑指offer》

    相关文章

      网友评论

          本文标题:剑指 offer 笔记 14 | 链表中倒数第k个结点

          本文链接:https://www.haomeiwen.com/subject/ycgnfctx.html