STL Stack v / s功能栈的性能

时间:2015-02-18 16:32:10

标签: c++ stl

我正在研究与反转链接列表部分相关的代码。对于反转部分,我使用的算法是将列表的节点推送到堆栈,然后继续弹出堆栈并更正每个节点的下一个指针。我遇到的问题是使用STL堆栈提供了比函数调用堆栈更好的性能,反之亦然。

我原本期望STL堆栈的性能更好,因为调用函数堆栈还有其他开销,但是从提交细节来看似乎不然。我错过了什么,或者功能堆栈是否表现得更好?

感谢您提供的任何帮助。

附加代码,万一有人想看看。函数之间反向的参数是列表的头部,以及两个索引(包括1,包括),在这两个索引之间应该反转节点。我认为你不需要查看代码:

#include <iostream>
#include <cmath>
#include <string>
#include <vector>
#include <stack>

using namespace std;

 struct ListNode {
      int val;
      ListNode *next;
      ListNode(int x) : val(x), next(NULL) {}
  };

class Solution {
public:
ListNode *reverseBetween(ListNode *head, int m, int n)
{
    int counter = 1;
    stack<ListNode*> holder;
    ListNode* current = head;
    ListNode* pre_flip = NULL;
    ListNode* to_return = head;
    while (counter < m)
    {
      pre_flip = current;
      current = current->next;
      counter++;
    }
    while (counter <= n)
    {
      holder.push(current);
      if (counter != n)
        current = current->next;
      counter++;
    }
    if (m == 1)
      to_return = current;
    ListNode* post_flip;
    post_flip = current->next;
    if (pre_flip == NULL)
      pre_flip = to_return;
    while (holder.empty() == 0)
    {
      ListNode* temp = holder.top();
      pre_flip->next = temp;
      pre_flip = pre_flip->next;
      holder.pop();
    }
    pre_flip->next = post_flip;
    return to_return;
}
};

0 个答案:

没有答案