C++ C++;为数据结构中的下一个*分配新地址
有件事我想不通。。。 基本上,我得到了以下数据结构:C++ C++;为数据结构中的下一个*分配新地址,c++,pointers,data-structures,struct,C++,Pointers,Data Structures,Struct,有件事我想不通。。。 基本上,我得到了以下数据结构: struct node_ll { int payload; node_ll *next; //pointer to next node }; 这本质上是一堆数字。 我需要创建一个具有以下原型的方法: int tail_return(node_ll **list) 其中,**列表是上述数据结构的内存地址。我的执行情况如下: int tail_return(node_ll **list) { node_ll *te
struct node_ll {
int payload;
node_ll *next; //pointer to next node
};
这本质上是一堆数字。
我需要创建一个具有以下原型的方法:
int tail_return(node_ll **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
(**list).next = prev_temp;
应该是
prev_temp->next = 0 ;
当您执行
(**列表)时。下一步=上一步代码>您正在操作传递给方法的参数,而不是链接列表中的最后一个节点。我假设tail\u return应该获取节点的链接列表并删除tail元素
是的,per@Aditya,看起来像
(**list).next = prev_temp;
线路出现问题。原因是您正在重新分配列表以指向倒数第二个元素(prev_temp)
删除最后一个元素的操作是正确的
delete temp;
并拆下管路
delete prev_temp;
因为这也会删除倒数第二个元素,您希望保留它
另外,您当前正在返回倒数第二个元素。所以改变
int toReturn = prev_temp->payload;
到
这太复杂了。如果你这样写的话
(*list)->next = prev_temp;
现在很清楚(er)您更改了列表中的第一个元素
这只是编写更清晰代码的一个小建议。查看其他答案以了解问题的解决方案。tail
return应该做什么?想想这行代码的作用:(**列表)。next=prev\u temp
您应该使用std::list
或std::stack
,分别可从
和
获得。tail\u return查找此堆栈中的最后一个元素,返回并删除它。例如,我有另一个方法head_return,它返回第一个元素并将其删除,效果很好。(**列表)。下一个=上一个温度;我认为这应该访问节点ll中的*下一个,并将其设置为prev_temp中保存的地址。
(**list).next = prev_temp;
(*list)->next = prev_temp;