• 链表中倒数第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 }
  • 相关阅读:
    函数
    registry搭建及镜像管理-harbor
    用户输入和while 循环
    dockerfile
    字典,set
    if 语句
    alpine操作
    循环:列表,元组
    列表
    docker跨主机通信-overlay
  • 原文地址:https://www.cnblogs.com/yangrenzhi/p/5780627.html
Copyright © 2020-2023  润新知