如何从列表中删除节点
Posted
技术标签:
【中文标题】如何从列表中删除节点【英文标题】:How to remove nodes from the list 【发布时间】:2018-04-25 02:19:20 【问题描述】:我希望我的程序在RemoveHead()
函数中删除节点并返回项目。我不确定是什么错误。在main()
函数中,一切正常,但我的程序没有删除Head
,它仍在打印上一个列表L1
:一个非空列表。
为了更清楚,我正在上传我的输出和所需的输出。
这是我的程序:
int main()
cout << "===== Testing Step-1 =====\n";
cout << "Testing default constructor...\n";
LinkedList L1;
L1.Print(); // should be empty
cout<<"\nTesting AddHead()...\n";
for(int i=0; i<10; i++)
cout << i << ' ';
L1.AddHead(i);
cout << endl;
L1.Print();
cout << "\nTesting IsEmpty() and RemoveHead()...\n";
while(!L1.IsEmpty())
cout << L1.RemoveHead()<< ' '; // should be printed in reverse
cout << endl;
L1.Print(); // should be empty
int LinkedList::RemoveHead()
if(Head==NULL)
cerr << "Error Occured. " << endl;
exit(1);
else
NodePtr temp;
temp->Item = Head->Item;
temp = Head;
Head = Head->Next;
delete temp;
//return 0; to be removed while compilation
bool LinkedList::IsEmpty()
Head==NULL;
return true;
void LinkedList::Print()
if (Head==0)
cout << "Empty error ." ;
else
NodePtr crnt;
crnt = Head;
while(crnt!= NULL)
cout << crnt->Item << " ";
crnt = crnt->Next;
cout << endl;
这是输出:
我的输出应该是这样的:
===== Testing Step-1 =====
Testing default constructor...
List is empty.
Testing AddHead()...
0 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 0
Testing IsEmpty() and RemoveHead()...
9 8 7 6 5 4 3 2 1 0
List is empty.
【问题讨论】:
请提供最低限度的示例代码。目前有很多垃圾行不鼓励。 在IsEmpty()
, Head==NULL;
你忘了if
。就让它return Head == NULL;
另外,RemoveHead()
不完整。
RemoveHead() 有什么问题??
@muzzi 1. 它缺少结束
和 2. 它没有返回值。
【参考方案1】:
正如Johnny Mopp 的评论中所述:
您的 IsEmpty()
方法应该从这里重构:
bool LinkedList::IsEmpty()
Head==NULL;
return true;
到这里:
bool LinkedList::IsEmpty()
return Head==nullptr;
感谢codekaizer 指出使用nullptr instead of NULL。
【讨论】:
以上是关于如何从列表中删除节点的主要内容,如果未能解决你的问题,请参考以下文章