如何跟踪单链表的开头?

时间:2014-11-04 06:56:20

标签: c++ pointers linked-list

我有以下节点实现。

   struct node*{
    int data;
    node* next;} 

现在我添加一些值并创建一个链表,但我想跟踪链表的开头。 有什么建议?

4 个答案:

答案 0 :(得分:2)

布拉沃!

想知道如何实现链表真好! 但是你应该添加一个优秀的实例,让你更容易管理它:

班级实施

这是管理它的更重要的方法,如果你想要跟踪你的行为(并且不要把两个列表弄得一团糟),管理你的链表的类可能会很好!它可能是这样的:

class my_linked_list {
private:
 struct node {int value; struct node* next;}; //by doing this only you can manage your linked list!
 struct node* m_head;

public:
 my_linked_list() : m_head(nullptr) {}//here you just instantiate teh manager, not the head!

 void append_value(int a);// here is some
 int  pop_value();        // methode which allow you to manage your nodes easily!

};

仅功能实现

轻型版本可以仅使用功能来管理它,如下:

node* create_head(int);//create your first node
void  append_value(node**,int); // manage your node, call it like append_value(&head, value); because head can move from nullptr -> heap allocated struct!
int   pop_value(node**); // same as previous, heap allocated-> nullptr
void  delete_list(node**);//delete all and put your head to nullptr

修改

正如@anatolyg所说,前面的例子更像是一个C例子!在c ++中使用它的好方法是:

node* create_head(int);//create your first node
void  append_value(node*&,int); // manage your node, call it like append_value(&head, value); because head can move from nullptr -> heap allocated struct!
int   pop_value(node*&); // same as previous, heap allocated-> nullptr
void  delete_list(node*&);//delete all and put your head to nullptr

瞧!

更多建议只是评论!

答案 1 :(得分:0)

制作一个空的单链表:

int main()
{
    ...
    node* head = nullptr;
    ...
}

然后,您可以使用函数将元素添加到此列表中:

...
node* head = nullptr;
add_element(8, head);
add_element(9, head);
...

此处,add_element(或任何其他名称)是您必须实施的功能。

注意:c ++有一个标准库,它有单链表;如果您只是想使用它们,请参阅std::forward_list模板的说明。但 我假设您正在学习如何实现链接列表,因此请使用上面的示例。

答案 2 :(得分:0)

我使用指向节点的指针,该指针指向头部或指向最后一个节点的下一个指针,以便附加到具有相同代码的空或非空列表。请注意,head将始终指向列表的开头(或者它将为NULL)。

typedef NODE_{
NODE_ *next;
int    data;
}NODE;

NODE *  head = NULL;              // ptr to head of list
NODE ** pprevn = &head;           // ptr to head or last node's next pointer.

    *pprevn = new NODE;           // append a new node
    (*pprevn)->data = 1234;       // set data
    pprevn = &((*pprevn)->next);  // advance pprevn
    *pprevn = NULL;               // set next pointer to NULL

答案 3 :(得分:-1)

您应该首先从C Basics开始。但是你在这里:

node firstNode; //这会在堆栈上保留内存

node * header =& firstNode; //指针指向firstNode Struct的起始地址