我有以下节点的实现。
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结构的起始地址