我有以下节点实现。
struct node*{
int data;
node* next;}
现在我添加一些值并创建一个链表,但我想跟踪链表的开头。 有什么建议?
答案 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的起始地址