删除链表的第一个节点(C++)

Dat*_*dze -3 c++ linked-list

我想知道这段代码是否正确删除了第一个节点,还是我必须将列表的头部作为指针传递?

 void List::deleteFirst()          
 {
 temp = head;
 head = head->next;
 delete temp;
 }
Run Code Online (Sandbox Code Playgroud)

这是班级 List

  class List
  {
   private:
           struct node
           {
                int data;
                node * next;
           };
           node * head;
           node * curr;
           node * temp;
   public:
           //List();
           //void AddNode(int addData);
           //void DeleteNode(int delData);
           void deleteFirst();
           //void PrintList();
};
Run Code Online (Sandbox Code Playgroud)

Chr*_*isB 5

只有在以下情况下才有效:

  • 您的节点使用分配 new
  • 您确保head始终指向有效节点(列表不为空).

否则,您将导致未定义的行为.

但是你真的不应该存储temp为成员变量,而应该是局部变量.

这同样适用于该curr变量,确保它真正需要的一员.

此外,如果删除一个对象(例如您的节点),所有剩余的指针都将变为无效,因此请注意,之后不要尝试访问它,例如.通过curr*指针.