zoukankan      html  css  js  c++  java
  • 链表中倒数第k个节点

    思路1:

    先遍历链表一次,统计出链表节点个数n,

    然后,倒数第k个节点是,n-k+1。

    缺点:该方法需要遍历两次列表。

    思路2:

    定义两个指针,第一个指针向前遍历k-1步,第二个指针保持不动;

    从第k步开始,第二个指针从链表头指针开始遍历,当第一个指针到底链表的尾端,第二个指针正好指向倒数第k个节点。

    注意点:

    1.pListHead为空指针

    2.pListHead的链表节点数少于k

    3.输入参数为0,由于k是一个无符号整数,k-1会得到0xFFFFFFFF,循环次数超过预计

     1 /*
     2 struct ListNode {
     3     int val;
     4     struct ListNode *next;
     5     ListNode(int x) :
     6             val(x), next(NULL) {
     7     }
     8 };*/
     9 class Solution {
    10 public:
    11     ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
    12     if(pListHead == nullptr || k == 0)
    13         return nullptr;
    14     ListNode * pAhead = pListHead;
    15     ListNode * pBehind = nullptr;
    16     
    17     for(unsigned int i = 0; i < k-1; i++)
    18     {
    19         if(pAhead->next != nullptr)
    20             pAhead = pAhead->next;
    21         else
    22         {
    23             return nullptr;
    24         }
    25     }
    26         
    27     pBehind = pListHead;
    28     while(pAhead->next != nullptr)
    29     {
    30         pAhead = pAhead->next;
    31         pBehind = pBehind->next;
    32     }
    33     return pBehind;
    34     }
    35 };
  • 相关阅读:
    java的内存分配
    Java多线程sleep和wait的区别
    java static关键字
    在自己电脑创建svn服务、导入和导出项目
    开发工具下载地址
    svn操作步骤
    java的反射
    正数|非负数|正整数正小数和0 |金额正则表达式
    springBatch文件批处理
    IE浏览器问题之清除缓存!!!
  • 原文地址:https://www.cnblogs.com/zmm1996/p/11891977.html
Copyright © 2011-2022 走看看