如何跟踪单链表的开头

How to keep track of beginning of single linked list?

本文关键字:链表 开头 单链表 跟踪 何跟踪      更新时间:2023-10-16

我有以下节点的实现。

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

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

太棒了

想知道如何实现链表是件好事!但你应该添加一个高级实例,让你更容易管理它:

类实现

这是一种更重的管理方式,如果你想跟踪你的行为,一个管理你的链表的类可能会很好(不要把甜菜文两个列表搞砸)!可能是这样的:

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

欲了解更多建议,请发表评论!

我使用指向节点的指针,该指针指向头或最后一个节点的下一个指针,以便用相同的代码附加到空或非空列表。请注意,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

要创建一个空的单链表:

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

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

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

这里,add_element(或任何其他名称)是您必须实现的函数。

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

您可能应该先从C基础知识开始。但你来了:

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

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