2017-07-24 54 views
-2

我已經實現了鏈接列表類,但是我不知道如何去使它指向另一個鏈接列表。我希望在同一個班級裏有三個指標。一個用於數據,一個用於下一個,最後一個用於另一個鏈接列表。修改鏈接列表,使每個元素可以存儲指向另一個鏈接列表的指針

有人能指向我在正確的方向。

頭文件

class Node{ 

public: 
    typedef int value_type; 
    //COSTRUCTOR- get two values link and positive integer 
    Node(const value_type& i_data = value_type(), Node *i_link= nullptr) //value_type()=0 //Constructor 
    { 
     this->data_field = i_data; 
     this->link_field= i_link; 
    } 
    //Member functions to set the data and next; 
    void set_data(const value_type& new_link); 
    void set_next(Node *new_next); 
    //Constant member function to retrieve the current data: 
    value_type get_data()const; 
    //Two slightly different members functions te retrieve current link 
    Node* get_next(); 
    const Node* get_next() const; 
    //friend std::ostream& operator<< (std::ostream& os, Node& p); 
private: 

    Node* link_field; 
    value_type data_field; 

}; 
size_t LinkedList_size(const Node* headptr); 
void LinkedListInsertAtHead(Node*& headptr, const Node::value_type& entry); 
// LinkedList_insert_at(list,input, 99); 
void LinkedList_insert_at(Node*& headptr, int index, const Node::value_type& entry); 
void LinkedList_delete(Node*& headptr); 
void LinkedList_delete_from(Node*& headptr,int index); 
void LinkedList_print(const Node* headptr); 

實現文件

#include <iostream> 
#include <map> 
#include "node.h" 
// Node(const value_type& data, Node* next);//consturctor 

void Node::set_data(const value_type& new_data) { this-> data_field = new_data; } 
void Node::set_next(Node* new_next)    { this-> link_field = new_next; } 
Node::value_type Node::get_data() const  { return this-> data_field; } 
      Node* Node::get_next()   { return this-> link_field; } 
    const Node* Node::get_next() const  { return this-> link_field; } 

size_t LinkedList_size(const Node* headptr) //point to a const node 
{ 
    /// Node* = {[n1] [n2] [n3] [n4] [n5] [n5] } ,@t first: headptr = n1; 
    /// curr = n1; curr = headptr 
    /// curr = n1->n2, curr= curr-> headptr 
    size_t count = 0; 
    for(const Node* curr = headptr; curr != nullptr; curr = curr->get_next()) 
    { 
    count++; 
    } 
    return count; 
} 
void LinkedListInsertAtHead(Node*& headptr, const Node::value_type& entry) 
{ 
    //0->0->0->null 
    headptr = new Node(entry, headptr);//inserts and return a new address 

} 

void LinkedList_insert_at(Node*& headptr, int index, const Node::value_type& entry) 
//0->O->O ->O 
//insert_at(0): N->->O->O ->O 
//insert_at(1): O->O->O->O ->O 
//insert_at(n=4): O->O->O->O ->N 
{ 
    if(index==0){ 
     LinkedListInsertAtHead(headptr, entry); 
     return; 
    } 
    Node* node_before = nullptr; 
    Node* node_after = headptr;//->get_next(); 

    for(int i = 0; i < index; ++i) 
    { 
     node_before = node_after; 

     node_after = node_after->get_next(); 
    } 

    Node* insert_node= new Node(entry, node_after); 

    node_before->set_next(insert_node); 

} 
void LinkedList_delete(Node*& headprt) 
// 36[data] 46[dat] 94[data] [] [] [] [] 
{ 
    Node* curr = headprt; //delete [data] and address"36" 

    headprt = headprt->get_next();//assign to ->46[data] 
    delete curr; 

} 

void LinkedList_delete_from(Node*& headptr,int index) 
{ 
    if(index==0) 
    { 
    LinkedList_delete(headptr); 
    return; 
    } 

    Node* node_before = nullptr; 
    Node* curr = headptr;//->get_next(); //curr short for current 

    for(int i=0; i<index; ++i) 
    { 
    node_before = curr; 
    curr = curr->get_next(); 
    } 

    node_before->set_next(curr->get_next()); 

    delete curr; 

} 

void LinkedList_print(const Node* headptr) 
{ 
/* THIS DOES THE SAME; 
    const Node* temp = headptr; 
    while(temp!= nullptr) 
    { 
     //cout insertion operator 

     std::cout << temp->get_data() <<" "; 
     temp = tempp->get_next();///will connect to next data []->get_next(return this->[next])->[]->nullptr 

    } 
    */ 
while(headptr != nullptr) 
{ 

    std::cout << headptr->get_data()<<" "; 
    headptr = headptr->get_next();///will connect to next data []->get_next(return this->[next])->[]->nullptr 

} 

std::cout<<std::endl;//to skip a line 

} 
+0

那麼,你只實現了一個'Node'類。如果你想指向一個'LinkedList',你需要首先有這樣一個類。 – HeyJude

+1

你上次問這個問題的同樣的問題。同樣的解決方案。 – user4581301

回答

0

也許你的問題是一個向前聲明:

// Forward declarations 
class Linked_List; 
class Data; 

class Node 
{ 
    Linked_List * p_linked_list; 
    Data *  p_data; 
    Node *  p_next; 
}; 

的方法實現將東東d DataLinked_List的定義。