gpt4 book ai didi

c++ - C++中的简单链表

转载 作者:IT老高 更新时间:2023-10-28 22:31:31 25 4
gpt4 key购买 nike

我即将创建一个可以插入和显示到现在的链接:

struct Node {
int x;
Node *next;
};

这是我的初始化函数,只会为第一个 Node 调用:

void initNode(struct Node *head, int n){
head->x = n;
head->next = NULL;
}

添加Node,我认为我的链表不能正常工作的原因在于这个函数:

void addNode(struct Node *head, int n){
struct Node *NewNode = new Node;
NewNode-> x = n;
NewNode -> next = head;
head = NewNode;
}

我的main函数:

int _tmain(int argc, _TCHAR* argv[])
{
struct Node *head = new Node;

initNode(head, 5);
addNode(head, 10);
addNode(head, 20);
return 0;
}

让我按照我认为可行的方式运行该程序。首先,我将头部 Node 初始化为 Node,如下所示:

head = [ 5 |  NULL ]

然后我添加一个 n = 10 的新节点并将 head 作为我的参数传递。

新节点 = [ x | next ] next 指向头部。然后我改变了head指向NewNode的位置,因为NewNode现在是LinkedList中的第一个Node。

为什么这不起作用?我将不胜感激任何可以使我朝着正确方向前进的提示。我觉得 LinkedList 有点难理解。

当我打印这个时,它只返回 5:

最佳答案

这是我在这种情况下能想到的最简单的例子,没有经过测试。请考虑这使用了一些不好的做法,并且与您通常使用 C++ 的方式不同(初始化列表、声明和定义的分离等)。但这是我无法在此处涵盖的主题。

#include <iostream>
using namespace std;

class LinkedList{
// Struct inside the class LinkedList
// This is one node which is not needed by the caller. It is just
// for internal work.
struct Node {
int x;
Node *next;
};

// public member
public:
// constructor
LinkedList(){
head = NULL; // set head to NULL
}

// destructor
~LinkedList(){
Node *next = head;

while(next) { // iterate over all elements
Node *deleteMe = next;
next = next->next; // save pointer to the next element
delete deleteMe; // delete the current entry
}
}

// This prepends a new value at the beginning of the list
void addValue(int val){
Node *n = new Node(); // create new Node
n->x = val; // set value
n->next = head; // make the node point to the next node.
// If the list is empty, this is NULL, so the end of the list --> OK
head = n; // last but not least, make the head point at the new node.
}

// returns the first element in the list and deletes the Node.
// caution, no error-checking here!
int popValue(){
Node *n = head;
int ret = n->x;

head = head->next;
delete n;
return ret;
}

// private member
private:
Node *head; // this is the private member variable. It is just a pointer to the first Node
};

int main() {
LinkedList list;

list.addValue(5);
list.addValue(10);
list.addValue(20);

cout << list.popValue() << endl;
cout << list.popValue() << endl;
cout << list.popValue() << endl;
// because there is no error checking in popValue(), the following
// is undefined behavior. Probably the program will crash, because
// there are no more values in the list.
// cout << list.popValue() << endl;
return 0;
}

我强烈建议您阅读一些有关 C++ 和面向对象编程的知识。一个好的起点可能是:http://www.galileocomputing.de/1278?GPP=opoo

编辑:添加了弹出功能和一些输出。如您所见,程序推送 3 个值 5、10、20,然后将它们弹出。之后顺序颠倒,因为此列表在堆栈模式下工作(LIFO,后进先出)

关于c++ - C++中的简单链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22141477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com