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

        题目:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如一个链表有6个节点,从头节点开始它们的值一次是1,2,3,4,5,6。这个链表的倒数第三个节点是值为4的节点。

        链表节点定义如下:

          struct ListNode{

        int m_nValue;

        ListNode* m_pNext;

      }

        解析:有两种方法可以实现,一种是第一遍遍历链表,得到链表节点的个数n,之后再一次遍历,n-k+1节点即为倒数第k个节点,这种方法要先遍历一遍,复杂度高。第二种方法是用两个指针,移动两个指针,保证两个指针间隔为k,等到前面的指针遍历到链表的结尾时,后面指针所指即为倒数第k个节点。代码如下:

     1 struct ListNode{
     2     int m_nValue;
     3   ListNode* m_pNext;
     4 };
     5 //注重代码的鲁棒性,pListHead为NULL的情况,k-1大于整个链表长度的情况都要考虑到
     6 ListNode* FindKthToTail(ListNode* pListHead,int k){
     7     if(pListHead == NULL || k <= 0)
     8         return NULL;
     9     ListNode* pAhead = pListHead;
    10     ListNode* pBehind = pListHead;
    11     for(int i=1;i<=k-1;i++){
    12         if(pAhead->m_pNext == NULL)
    13             return NULL;
    14         pAhead = pAhead->m_pNext;
    15     }
    16     while(pAhead->m_pNext!=NULL){
    17         pAhead = pAhead->m_pNext;
    18         pBehind = pBehind->m_pNext;
    19     }
    20     return pBehind;
    21 }
  • 相关阅读:
    JAVA,JSP,Servlet获取当前工程路径-绝对路径
    Oracle中Null与空字符串' '的区别
    使用JDBC调用存储过程
    oracle 11g SQL语句补充学习
    flutter 登录后跳转到根路由
    Mac下mongodb connect failed 连接错误解决方法
    flutter 新增安卓ios 闪图
    npm 发布包
    js中setTimeout() 时间参数为0
    ionic3 打包 混淆代码
  • 原文地址:https://www.cnblogs.com/yangrenzhi/p/5780627.html
Copyright © 2011-2022 走看看