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;
    }
    
  • 相关阅读:
    2021.8.2—2021.8.8
    2021.7.29
    2021.7.27
    2021.7.26
    GC日志分析
    学习类加载机制笔记
    4、SpringCloud停更说明
    3、SpringCloudAlibaba版本选择
    京东、阿里的微服务架构
    nacos集群安装
  • 原文地址:https://www.cnblogs.com/arcsinw/p/12954977.html
Copyright © 2011-2022 走看看