我想检查C++中的链表是否为空。我有以下课程:
class IntLinkedList
{
private:
struct LinkedListNode // Structure for linked list
{
int value;
struct LinkedListNode *next;
};
LinkedListNode *head; // List head pointer
public:
IntLinkedList(void) // Constructor
{ head = NULL; }
~IntLinkedList(void); // Destructor
void AppendNode(int);
void InsertNode(int);
void DeleteNode(int);
void DisplayList(void);
bool isEmpty(LinkedListNode*);
};
// isEmpty function
bool IntLinkedList::isEmpty(LinkedListNode *node)
{
bool status;
node = head;
if ( node->next == NULL )
status = true;
else
status = false;
return status;
}
但是我不能通过同一类的对象在其他类中使用这个函数。
如何使用可通过同一类的对象在另一个类中访问的函数来检查空列表?
您得到的错误是由于您将函数声明为 bool isEmpty(LinkedListNode)
但您尝试将其定义为 bool isEmpty(LinkedListNode*)
引起的。不同之处在于,在定义中你有一个指针,而在声明中只有一个对象。你必须选择一个,因为这些是完全不同的东西。
也就是说,我不明白为什么你根本不需要参数来检查你的列表是否为空。只需完全删除参数并使用if ( head->next == NULL )
- 非静态成员函数始终通过类的实例调用。
只是为了完整起见,列表中的第一项由 head
指向,因此为了检查列表中是否有任何内容,您应该检查它是否为空指针:
bool IntLinkedList::isEmpty() const
{ //added const for const-correctness, should be added to declaration as well
return head == nullptr;
}
在 list.empty()
之后
返回列表容器是否为空(即其大小是否为 0(。
两点建议:
有一个size
变量来检查列表中的节点数,这样您的isEmpty()
就return size == 0;
或者在您当前的实现中,只需修改为:
bool isEmpty() {
return head == null; // if head is null, there's no node in list
}