链表倒数第K个节点

来源:互联网 发布:java flickr api 编辑:程序博客网 时间:2024/05/29 14:30

题目描述:

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

解题关键:

代码的鲁棒性(对于不合理的情况,予以处理),也就是莫要忘记节点数小于K的情况。

解题思路:

使用栈存储每一节点,相当于将链表进行倒序排放,然后判断节点数与K的大小,当K<总节点数时,连续出栈K次,获得倒数第K个节点,否则返回NULL;

C++实现代码

/*struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}};*/class Solution {public:    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {            ListNode *kNode=NULL;        ListNode *pNode=pListHead;        stack<ListNode *> nodes;        int count=0;        while(pNode!=NULL)            {            nodes.push(pNode);            pNode=pNode->next;            count++;        }        if(count<k)            {            return NULL;        }        for(int i=0;i<k;i++)            {            if(!nodes.empty())                {                kNode=nodes.top();                nodes.pop();            }        }        return kNode;    }};