2016-05-28 56 views
-3

所以邏輯如下: 假設鏈接列表由(6,7,8)作爲數據組成,並且我通過insert(1,5),所以列表將爲(5,6,7,8)。 同樣在insert(3,2)上的鏈接列表是(6,7,2,8)通過指定第n個節點的位置插入數據在單個鏈接列表中

我試圖編譯下面的代碼,但它通過「 - 啓動」

我試着調試,甚至尋找問題的答案,但發現給我的錯誤,說明─

未定義參考無主請大家提出解決方案。歡迎任何進一步的建議和錯誤修復。 (我已經使用鍵盤編譯)

#include<iostream> 
using namespace std; 
class Link_no 
{ 
    struct node 
    { 
     int data; 
     node *next; 
    }; 

    void insert(int n,int d,node *head) 
    { 
     node *temp=new node(); 
     temp->data=d; 
     temp->next=NULL; 
     node *temp1; 

     if(n==1) 
     { 
      temp->next=head; 
      head=temp; 
      return; 
     } 
     else 
      temp1=head; 
     { 
      for(int i=0;i<n-1;i++) 
      { 
       temp1=temp1->next; 
      } 
      temp->next=temp1; 
      temp1=temp; 
     } 
    } 
    void print(node *start) 
    { 
     node *temp=start; 
     while(temp!=NULL) 
     { 
      cout<<temp->data<<endl; 
      temp=temp->next; 
     } 
    } 
    int main() 
    { 
     node *head=NULL; 
     Link_no o1; 
     o1.insert(1,5,head); 
     o1.insert(2,7,head); 
     o1.insert(1,9,head); 
     o1.print(head); 
     return 0; 
    } 
} 
+5

C++心不是Java中,'main'確實不要一類 – user463035818

+2

我猜這是功課裏面屬於,但是如果你可以改變它:名單是這項工作一個非常糟糕的數據結構,動態像'std :: vector'這樣的數組可以做得更好。 –

回答

0

下編譯

#include<iostream> 
using namespace std; 
class Link_no 
{ 
    private: 
    struct node 
    { 
     int data; 
     node *next; 
    }; 

    node *head; 
    public: 

    Link_no(){ 
     head = nullptr; 
    } 

    void insert(int n,int d) 
    { 
     node *temp=new node(); 
     temp->data=d; 
     temp->next=NULL; 
     node *temp1; 

     if(n==1) 
     { 
      temp->next=head; 
      head=temp; 
      return; 
     } 
     else 
      temp1=head; 
     { 
      for(int i=0;i<n-1;i++) 
      { 
       temp1=temp1->next; 
      } 
      temp->next=temp1; 
      temp1=temp; 
     } 
    } 

    void print() 
    { 
     node *temp=head; 
     while(temp!=NULL) 
     { 
      cout << "data is " << temp->data<<endl; 
      temp=temp->next; 
     } 
    } 


}; 

    int main() 
    { 
     Link_no o1; 
     o1.insert(1,5); 
     o1.insert(2,7); 
     o1.insert(1,9); 
     o1.print(); 
     return 0; 
    } 

你想要的但它並沒有完全只做打印出5和9的數據,所以你需要調試多一些。

編輯: 我建議你拿紙和筆,並手動嘗試做你在做什麼,因爲在那裏出了問題。

如果你找不到自己的以下作品,我還沒有嘗試過測試極端情況。

#include<iostream> 
using namespace std; 
class Link_no 
{ 
    private: 
    struct node 
    { 
     int data; 
     node *next; 
    }; 

    node *head; 
    public: 

    Link_no(){ 
     head = nullptr; 
    } 

    void insert(int n,int d) 
    { 
     node *temp=new node(); 
     temp->data=d; 
     temp->next=NULL; 
     node *temp1; 

     if(n==1) 
     { 
      temp->next=head; 
      head=temp; 
      return; 
     } 
     else 
     { 
      cout << "foo" << endl; 
      temp1=head; 
      for(int i=1;i<n-1;i++) 
      { 
       temp1=temp1->next; 
      } 
      node *temp2 = temp1->next; 
      temp1->next = temp; 
      temp->next=temp2; 
     } 
    } 

    void print() 
    { 
     node *temp=head; 
     cout << "link" << endl; 
     while(temp!=NULL) 
     { 
      cout << "data is " << temp->data<<endl; 
      temp=temp->next; 
     } 
    } 


}; 

    int main() 
    { 
     Link_no o1; 
     o1.insert(1,5); 
     o1.print(); 
     o1.insert(2,7); 
     o1.print(); 
     o1.insert(1,9); 
     o1.insert(2,6); 
     o1.print(); 
     return 0; 
    } 
+0

你的代碼工作正常。謝謝!只是一個問題......在使用nullptr時,會顯示一個未定義的範圍。但是,當我將它替換回爲null時,編譯成功。請嘗試查看此問題。 –

+0

你明白你做錯了什麼嗎? 你也可以更清楚一點,你的意思是未定義的範圍? 這是一個編譯錯誤還是你的IDE給這個錯誤? – turoni

+0

我已經編譯使用codeshef在線編譯器。它只爲nullptr顯示此錯誤,而不是爲null。也許問題出在IDE本身或什麼的? –

4

C++心不是Java中,主要不類內部屬於。編譯器會抱怨,因爲代碼中沒有int main(),只有int Link_no::main(),但這不是程序的入口點。

1

class Link_no取出int main()。從class Link_no拿出struct node。它應該編譯。

相關問題