zoukankan      html  css  js  c++  java
  • [剑指Offer] 链表中倒数第k个节点

    问题描述

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

    分析

    使用快慢指针法

    初始slow指针指向头节点,fast指针头节点后k-1个节点,两个指针都向后移动,直到fast到达链表尾部

    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
        if (pListHead == NULL) return NULL;
        ListNode* slow = pListHead;
        ListNode* fast = pListHead;
    
        while(--k > 0) {
            if (fast->next != NULL) {
                fast = fast->next;
            } else {
                return NULL;
            }
        }
    
        while (fast->next != NULL) {
            slow = slow->next;
            fast = fast->next;
        }
    
        return slow;
    }
    

    简洁点可以将两个while合并成一个

    这个是用java写的因为C++版的死活不通过,后来才发现C++版的kunsigned int,不会 < 0,可以直接删掉unsigned或者用个int存下k就能通过了

    public ListNode getKthFromEnd(ListNode head, int k) {
        if (head == null) return head;
        ListNode fast = head;
        ListNode slow = head;
    
        while (fast != null) {
            if (--k < 0) {
                slow = slow.next;
            }
    
            fast = fast.next;
        }
    
        if (k > 0) return null;
        return slow;
    }
    
  • 相关阅读:
    监听器和过滤器
    jdbc电话本项目
    jdbc数据库中的增删改
    servlet实现登陆注册
    Python 数据分析基础小结
    分类模型构建
    回归模型构建
    sklearn——数据集调用及应用
    数据处理——数据集划分
    数据分析——Matplotlib图形绘制
  • 原文地址:https://www.cnblogs.com/arcsinw/p/12954977.html
Copyright © 2011-2022 走看看