0
我想要做的是找到單個鏈表的最後一個元素。我有下面的遞歸溶液: 在main()函數中,我創建保持數10的列表,以1迭代器不能停在最後(C++)
int main()
{
int i;
forward_list<int> flist;
for (i = 1; i <= 10; i ++)
flist.push_front(i);
forward_list<int>::iterator iter;
cout << "Original Sequence:" << endl;
for (iter = flist.begin(); iter != flist.end(); iter ++)
cout << *iter << " ";
cout << endl;
forward_list<int>::iterator end = flist.end();
forward_list<int>::iterator begin = flist.begin();
forward_list<int>::iterator ret;
ret = test_func(begin, end);
cout << "The " << TARGET << "th(st,nd,rd) to last element is " << *ret << endl;
return 0;
}
我創建的列表後,我打電話test_func。返回值應該是我想要的元素的迭代器。
#define TARGET 3
static int counttt = 0;
forward_list<int>::iterator test_func(forward_list<int>::iterator iter, forward_list<int>::iterator end)
{
cout << "test..." << endl;
forward_list<int>::iterator temp;
if ((iter ++) != end)
temp = test_func(iter, end);
counttt ++;
if (counttt < TARGET)
return end;
else if (counttt == TARGET)
return iter;
else
return temp;
}
「test ...」用於調試,它告訴我調用了test_func()的次數。在我看來,test_func()應該被調用10次。但是,它將被呼叫11次,最後一次會導致分段錯誤。我覺得((iter ++)!= end)不會在正確的時間發生。
所有的代碼如下所示:
#include <forward_list>
#include <iostream>
#include <algorithm>
#include <stdlib.h>
using namespace std;
#define TARGET 3
static int counttt = 0;
forward_list<int>::iterator test_func(forward_list<int>::iterator iter, forward_list<int>::iterator end)
{
cout << "test..." << endl;
forward_list<int>::iterator temp;
if ((iter ++) != end)
temp = test_func(iter, end);
counttt ++;
if (counttt < TARGET)
return end;
else if (counttt == TARGET)
return iter;
else
return temp;
}
int main()
{
int i;
forward_list<int> flist;
for (i = 1; i <= 10; i ++)
flist.push_front(i);
forward_list<int>::iterator iter;
cout << "Original Sequence:" << endl;
for (iter = flist.begin(); iter != flist.end(); iter ++)
cout << *iter << " ";
cout << endl;
forward_list<int>::iterator end = flist.end();
forward_list<int>::iterator begin = flist.begin();
forward_list<int>::iterator ret;
ret = test_func(begin, end);
cout << "The " << TARGET << "th(st,nd,rd) to last element is " << *ret << endl;
return 0;
}
感謝,
凱文周
非常感謝你!!!我還有另外一個問題。本示例僅將forward_list作爲參數。我可以使它更一般嗎?列表中的數據可能是其他一些我不知道的數據結構。 –