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

    题目:输入一个链表,输出改链表倒数第K个结点。

    分析:常规方法可能就是,先遍历一遍链表,找到链表长度length,那么我们只需要第二次遍历length-k+1个结点就可以找到倒数第k个结点。

            比较好的方法是采用两个指针,让一个指针先走K-1步,后面的指针再跟上。这样只需要遍历一遍。

    注意:1.提高容错性,在链表为空 或者k为空。还有k大于链表长度。

            2.链表下一个结点,我们采用p=p->next.指针指向的数组我们采用p++;

    typedef int Type;
    struct listNode{
        Type data;
        listNode *nextNode;
    };
    
    listNode* findInverOfK(listNode * pHead,int k)
    {
       
       //还有其他各种情况的考察,容错性检查
       //链表递增到下一个结点:p=p->next,如果是指针指向一个数组,则用p++;
       if(NULL==pHead||k<=0)
            return NULL;                 //注意出错就返回NULL
      
           listNode *p_first=pHead;
           listNode *p_second=pHead;
           for (int i=0;i<k-1;i++)        //注意是k-1
           {
               if(p_second->nextNode!=NULL)
                   p_second=p_second->nextNode;
               else
                   return NULL;
           }
           while(p_second->nextNode!=NULL)
           {
               p_first=p_first->nextNode;  //注意不是p_first++;除非指向的是一个数组
               p_second=p_second->nextNode;
           }
           return p_first;
       
    }
  • 相关阅读:
    我的Java学习路线图
    请求重定向和请求转发的区别
    PHP代码审计学习-php安全基础
    无密码正向直连内网linux目标机复现
    Windows API 学习
    Http请求走私
    免杀手法-tcp套字节传递shellcode学习
    自启动模块构造-计划任务
    自启动模块构造-快速启动目录
    进程注入免杀学习
  • 原文地址:https://www.cnblogs.com/menghuizuotian/p/3777663.html
Copyright © 2011-2022 走看看