• 剑指offer——24链表中倒数第k个结点


    题目描述

    输入一个链表,输出该链表中倒数第k个结点。
     
    题解:
      1、普通解法,先遍历一遍计算链表长度,然后遍历到倒数第k个节点;
      2、只遍历一遍,使用双指针,使得头尾指针位差为k,那么当尾指针为空时,头指针就是倒数第k个位置。
     
      
     1 //遍历两次,垃圾
     2 class Solution01 {
     3 public:
     4     ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
     5         if (pListHead == nullptr || k <= 0)return nullptr;
     6         int listLenght = 0;
     7         ListNode *res = nullptr, *p = pListHead;
     8         while (p != nullptr)
     9         {
    10             listLenght++;
    11             p = p->next;
    12         }
    13         if (listLenght < k)return res;
    14         res = pListHead;
    15         int nums = 0;
    16         while (nums < (listLenght - k))
    17         {
    18             res = res->next;
    19             nums++;
    20         }
    21         return res;
    22     }
    23 };
    24 
    25 //遍历一次,双指针
    26 class Solution02 {
    27 public:
    28     ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
    29         if (pListHead == nullptr || k <= 0)return nullptr;
    30         ListNode *L, *Lk;
    31         L = Lk = pListHead;
    32         int i = 0;
    33         for (; Lk != nullptr; ++i)
    34         {
    35             if (i >= k)
    36                 L = L->next;
    37             Lk = Lk->next;
    38         }
    39         if (i < k)return nullptr;
    40         return L;        
    41     }
    42 };
  • 相关阅读:
    Go语言基础之切片
    Go语言基础之map
    Go语言基础之函数
    Go语言基础之指针
    Go语言基础之结构体
    Redis缓存失效策略
    redis 的过期策略都有哪些?内存淘汰机制都有哪些?
    关于redis的主从、哨兵、集群
    Redis的 RDB和 AOF持久化的区别
    为什么做分布式使用 Redis
  • 原文地址:https://www.cnblogs.com/zzw1024/p/11668783.html
Copyright © 2020-2023  润新知