gpt4 book ai didi

c++ - 链表在开头打印 0 值 c++

转载 作者:行者123 更新时间:2023-11-28 05:35:14 28 4
gpt4 key购买 nike

我正在通过创建一个简单的链表类来刷新我的 C++。我遇到的问题是当我尝试打印列表时,列表开头的打印为零。我怎样才能摆脱这个?另外,我的第二个构造函数有问题。我该怎么做?`

代码如下 list .h

#ifndef NODE_H
#define NODE_H


class List{
private:
typedef struct Node{
int data;
struct Node* next;
}* node;

node head;
int listLength;

public:
List();
List(int data, node nextLink);
void printList();
void push(int data);
void Delete(int d);
int listSize(void);
};

我的列表.cpp

#endif

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

List::List(){
head->data=0;
head->next= NULL;
listLength=0;
}

List::List(int data, node nextLink){
head=NULL;
listLength++;
}

void List::push(int data){



if(head==NULL){
head->data=data;
head->next= NULL;
}
else{
node cursor = head;
while(cursor->next != NULL)
cursor = cursor -> next;

node newNode= new Node;
newNode->data=data;
newNode->next=NULL;
cursor->next= newNode;
}
listLength++;
}

void List::printList(){
node cursor=head;
while(cursor!=NULL){
//if(cursor->data==0){cursor=cursor->next;}
if(cursor->next==NULL){
cout<<cursor->data<<endl;
return;
}
else{
cout<<cursor->data<<" -> ";
cursor=cursor->next;
}

}
cout<<endl;
}
int main(){
List li;
li.push(2);
li.push(3);
li.push(0);
li.push(4);
li.printList();
return 0;
}

最佳答案

您从不初始化您的头节点,因此您在下面的代码中写入未分配的内存。

if(head==NULL){
head->data=data;
head->next= NULL;
}

应该是:

if(head==NULL){
head = new Node; // added this line
head->data=data;
head->next= NULL;
}

您可能还需要第一个构造函数

List::List(){
head->data=0;
head->next= NULL;
listLength=0;
}

成为

List::List(){
head = NULL;
listLength=0;
}

至于第二个构造函数,我假设你想要这样的东西?

List::List(int data, node nextLink){
head = new Node;
head->data = data;
head->next = nextLink;
listLength = 1;
}

如果没有,你能更好地解释一下你想要什么吗?

我还要指出,通常认为为 Node 结构创建构造函数将 next 初始化为 NULL 被认为是良好的编程习惯,这样您就不必每次在整个代码中创建一个 new Node 时都显式设置它。

关于c++ - 链表在开头打印 0 值 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38468357/

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