我尝试在c ++上实现链表。下面是我的代码:
#include<iostream>
using namespace std;
class lnk
{
struct node
{
int data;
node *next;
};
node* insert(node *head,int data)
{
if(head==NULL)
{
node *temp;
temp->data=data;
temp->next=NULL;
head=temp;
}
else
head->next=insert(head->next,data);
return head;
}
node* find(node *head,int data)
{ while(head!=NULL)
{
if(head->data==data)
return head;
else
head=head->next;
}
cout<<"sorry";
return NULL;
}
void delete(node *head,int data)
{
node *temp=find(head,data);
if(temp==NULL)
;
else
if(head==temp)
{
head=head->next;
}
else
{
node *temp1=head;
while(temp1->next!=temp)
{
temp1=temp1->next;
}
temp1->next=temp->next;
delete temp;
}
}
void display(node *head)
{
while(head!=NULL)
{
cout<<head->data;
head=head->next;
}
}
};
int main()
{
lnk o1;
node *head=NULL;
head=o1.insert(head,5);
head=o1.insert(head,8);
o1.delete(&head,5);
o1.display(head);
return 0;
}
问题是我无法正确编译代码。首先,在main()中创建指针头时,它声明节点未在范围内声明。我尝试将定义切换为公共但没有成功。 我也得到函数签名不匹配的错误。也许是由于头指针没有正确声明。 请评估并向我提供有关该问题的可用编译代码。
答案 0 :(得分:1)
lnk o1;
node *head=NULL;
node
是lnk
中的内部类。这就是你如何宣布它的方式。要么坚持
typedef lnk::node node;
在main()
的开头,或者使用main()
将node
中的所有引用替换为lnk::node
。
编辑:忘了注意node
是私有的。你还必须把它变成公共内部阶级。
答案 1 :(得分:0)
首先,你需要公开它们:
class lnk
{
public:
之后,您需要声明节点的范围:
lnk::node *head=NULL;
第三,不要使用“删除”。这是保留关键字:
void deleteNode(node *head,int data)
做这三件事就会编译你的代码。我认为它不会起作用。如果您想要一个链表的工作示例: