• 剑指 Offer 22. 链表中倒数第k个节点


    描述

    None

    tags: list, double pointer

    思路

    1. 两次遍历
    class Solution {
    public:
        ListNode* getKthFromEnd(ListNode* head, int k) {
            ListNode* node = head;
            int length = 0;
            while(node){
                length++;
                node = node->next;
            }
            while(length>k){
                head = head->next;
                length--;
            }
            return head;
        }
    };
    
    1. 一次遍历(双指针)
    • 注意不要用while-loop
    class Solution {
    public:
        ListNode* getKthFromEnd(ListNode* head, int k) {
            ListNode* faster = head;
            for(int i = 0; i < k; i++){
                faster = faster->next;
            }
            //while(k){
            //    faster = faster->next;
            //    k--;
            //}
            while(faster){
                head = head->next;
                faster = faster->next;
            }
            return head;
        }
    };
    
    
    
  • 相关阅读:
    最小乘积(基本型)
    删除数组零元素
    大小写转换
    矩阵乘法
    字串统计
    出现次数最多的整数
    Anagrams问题
    前缀表达式
    2的次幂表示
    POJ
  • 原文地址:https://www.cnblogs.com/fengcnblogs/p/13512501.html
Copyright © 2020-2023  润新知