单链表

时间:2016-06-06 12:24:32

标签: c++ linked-list

我尝试在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()中创建指针头时,它声明节点未在范围内声明。我尝试将定义切换为公共但没有成功。 我也得到函数签名不匹配的错误。也许是由于头指针没有正确声明。 请评估并向我提供有关该问题的可用编译代码。

2 个答案:

答案 0 :(得分:1)

lnk o1;
node *head=NULL;

nodelnk中的内部类。这就是你如何宣布它的方式。要么坚持

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)

做这三件事就会编译你的代码。我认为它不会起作用。如果您想要一个链表的工作示例:

Segmentation fault (core dumped) when I delete pointer