gpt4 book ai didi

C++链表打印错误

转载 作者:太空宇宙 更新时间:2023-11-04 16:16:59 25 4
gpt4 key购买 nike

我不明白为什么 display() 函数只显示列表的第一个成员。我想我把指针弄得一团糟,但我不明白在哪里。我将其与其他链表源代码进行了比较,似乎该函数是以好的方式编写的。

#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;

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

void initNode(struct Node *head,int n);
void AddNode(int n,Node* head);
void display(Node* head);

int main()
{
Node * head = new Node;

initNode(head,5);
display(head);

AddNode(10,head);
display(head);

AddNode(15,head);
display(head);

cin.get();
return 0;
}

void AddNode(int n,Node * head)
{
Node * node = new Node;
node->Data = n;
node->next = NULL;

Node * nextNode = head;
while(nextNode)
{
if(nextNode->next == NULL)
{
nextNode->next = node;
}
nextNode = nextNode->next;
}
}

void display(Node * head)
{
while(head)
{
cout << head->Data << " "<<endl;
head = head->next;
}
}

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

最佳答案

您的 AddNode 方法过于复杂。做这样的事情来添加到前面:

Node *AddNode(int n, Node *head)
{
Node *newNode = new Node;
newNode->Data = n;
newNode->next = head;

return newNode;
}

或者添加到最后:

Node *AddNode(int n, Node *head)
{
Node *newNode = new Node;
newNode->Data = n;
newNode->next = NULL;

if(head == NULL) return newNode;

Node *current = head;

while(current->Next != NULL)
{
current = current->Next;
}

current->Next = newNode;

return head;
}

以这种方式执行AddNode,您将不需要initNode。现在你可以只是一天:

Node *head = NULL;
head = AddNode(5, head);
head = AddNode(10, head);
head = AddNode(15, head);

display(head);

此外,您不需要在 C++ 中说 struct Node,它只在 C 中需要。

关于C++链表打印错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21683328/

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