C++ 如何返回节点中的数据?
我必须在C++ 如何返回节点中的数据?,c++,c++11,linked-list,C++,C++11,Linked List,我必须在GetHead()和GetTail()中返回列表的开头和结尾 我试图自己返回head和tail并得到错误: cannot initialize return object of type 'int' with an lvalue of type 'Node<int> *const' return tail; 您不能返回head/tail本身,因为返回类型是t,因此必须返回内容 至于为什么在使用->value时在string()const中获得EXC\u BAD\u访
GetHead()
和GetTail()
中返回列表的开头和结尾
我试图自己返回head和tail并得到错误:
cannot initialize return object of type 'int' with an lvalue of type 'Node<int> *const'
return tail;
您不能返回
head
/tail
本身,因为返回类型是t
,因此必须返回内容
至于为什么在使用->value
时在string()const
中获得EXC\u BAD\u访问权限
,您的AddToTail
中存在一个主要问题。如果您刚刚添加了一个元素,那么head
和tail
是同一个指针,其中prev
和next
的值为NULL
。然后你会:
head = new Node<T>(v, tail, NULL);
获取新元素,找到它的prev
(当前的tail
/oldhead
),并说它的下一个是tail
。因此,新的头部
有一个next
的NULL
(它从未设置过),和prev
的tail
,而tail
本身有一个next
(因此,如果你从头部
返回,然后尝试前进,你将进入一个无限循环)
然而,来自tail
的无限循环甚至不是这里的问题。问题是head
中的next
路径命中NULL
而从未看到tail
。如果您尝试operator string()
,它将从head
开始,然后继续next
,直到到达tail
(如果列表构造正确,这是一个合理的假设)。但它永远不会到达尾部
,它只会点击NULL
,然后在试图读取NULL->value
时死掉,这显然是错误的
您需要修复AddToTail
,这样它就会创建一个合法的列表。并可能将assert
s添加到遍历列表
查找tail
的代码中,以验证它在命中tail
之前没有命中NULL
。我认为解决方法是将AddToTail
的else
案例更改为:
tail = new Node<T>(v, tail, NULL);
tail->prev->next = tail;
tail=新节点(v,tail,NULL);
尾部->上一个->下一个=尾部;
但是一定要重新检查您的逻辑,如果可能,适当地添加assert
s。当您尝试访问这些值时,您的列表是否非空?请发布一个。你不能把你的全部代码都放在这里。您需要隔离问题并创建一个解决方案。90%的代码不需要用于您要求的问题。
head->prev->next = tail;
tail = new Node<T>(v, tail, NULL);
tail->prev->next = tail;