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

    【问题】输入一个链表,输出该链表中倒数第k个结点。

    【思路】如果使用常规思维,那么我们需要遍历一次链表,然后再返回倒数第K个结点。如果K为节点长度的话,就需要遍历两次节点了,显然这种方法是不可取的!因此我们可以使用两个指针(前指针和后指针),前指针先移动k个节点,然后两者再一起移动,则后指针指向的节点为所求节点!

     1/*
     2struct ListNode {
     3    int val;
     4    struct ListNode *next;
     5    ListNode(int x) :
     6            val(x), next(NULL) {
     7    }
     8};*/
     9class Solution {
    10public:
    11    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
    12        if(pListHead == nullptr||k==0)
    13            return nullptr;
    14        ListNode*pTail=pListHead,*pHead=pListHead;
    15        for(int i = 1;i < k;++i)
    16        {
    17            if(pHead->next!=nullptr)
    18                pHead=pHead->next;
    19            else
    20                return nullptr;
    21        }
    22        while(pHead->next!=nullptr)
    23        {
    24            pHead=pHead->next;
    25            pTail=pTail->next;
    26        }
    27        return pTail;
    28    }
    29};
  • 相关阅读:
    POJ1700 Crossing River
    Glad to see you! CodeForces
    Summer sell-off CodeForces
    atcoderI
    Selling Souvenirs CodeForces
    Array Division CodeForces
    Tea Party CodeForces
    Atcoder F
    Atcoder E
    Average Sleep Time CodeForces
  • 原文地址:https://www.cnblogs.com/zhudingtop/p/11313426.html
Copyright © 2011-2022 走看看