如何从列表中删除节点

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。

【讨论】:

以上是关于如何从列表中删除节点的主要内容,如果未能解决你的问题,请参考以下文章

如何从xml中删除列表父节点?

如何从 XElements 列表中删除不需要的节点?

如何从drupal 6中的视图中删除节点

节点已插入,但输入的第一个节点已从列表中删除

从链接列表中删除节点无法正常工作

从单链表中删除最后一个节点