【发布时间】:2012-02-16 22:55:05
【问题描述】:
有些事情我无法理解... 基本上我得到了以下数据结构:
struct node_ll {
int payload;
node_ll *next; //pointer to next node
};
本质上是一堆数字。 我需要创建一个具有以下原型的方法:
int tail_return(node_ll **list)
其中**list是上述数据结构的内存地址。我的实现如下:
int tail_return(node_ll **list) {
node_ll *temp;
temp = *list;
node_ll *prev_temp;
prev_temp = *list;
bool firstPass = true;
while(temp){
if(firstPass == true){
temp = temp->next;
firstPass = false;
} else {
temp = temp->next;
prev_temp = prev_temp->next;
}
}
int toReturn = prev_temp->payload;
prev_temp->payload = 0;
(**list).next = prev_temp;
delete temp;
delete prev_temp;
return toReturn;
}
但是我从测试运行中得到以下输出:
List a after head insertion of 2,4,6,8,10 elements:
{10,8,6,4,2}
now removing the last element
DELETED: 2
{10,0} where it's supposed to be: {10,8,6,4}
我做错了什么?显然,该方法找到了要删除的正确值 - 2。但是为什么当我在删除后尝试打印它时,我最终得到 10 和 0?
【问题讨论】:
-
tailreturn 应该做什么? -
想想这行代码做了什么:
(**list).next = prev_temp; -
您应该使用
std::list或std::stack,分别可从<list>和<stack>获得。 -
tail_return 查找此堆栈中的最后一个元素,将其返回并删除。例如 - 我有另一个方法 head_return 它返回第一个元素并将其删除,它工作正常。 (**list).next = prev_temp;我的印象是这应该访问 node_ll 中的 *next 并将其设置为 prev_temp 中保存的地址。
标签: c++ pointers data-structures struct