gpt4 book ai didi

c++ - 单排序链表 - 无限循环

转载 作者:太空宇宙 更新时间:2023-11-04 14:14:33 24 4
gpt4 key购买 nike

我正在使用单个链表,我想将它从较低的整数值到较高的整数值排序。我虽然有这个想法,但随后执行进入了无限循环,我看不清楚原因。这是我使用的代码的一部分:

class Node {

int data;
Node* next;

public:

Node() { };
void SetData(int aData) { data = aData; };
void SetNext(Node* aNext) { next = aNext; };
int Data() { return data; };
Node* Next() { return next; };
};

class List {

Node *head;

public:

List() { head = NULL; };
void Print();
void Append(int data);
void Delete(int data);
};

void List::Append(int data) {

// Create a new node
Node* newNode = new Node();
newNode->SetData(data);
newNode->SetNext(NULL);

// Create a temp pointer
Node *tmp = head;

if ( tmp != NULL ) {
// Nodes already present in the list
// Parse to end of list anytime the next data has lower value
while ( tmp->Next() != NULL && tmp->Next()->Data() <= newNode->Data() ) {
tmp = tmp->Next();
}

// Point the lower value node to the new node
tmp->SetNext(newNode);
newNode->SetNext(tmp->Next());
}
else {
// First node in the list
head = newNode;
}
}

void List::Print() {

// Temp pointer
Node *tmp = head;

// No nodes
if ( tmp == NULL ) {
cout << "EMPTY" << endl;
return;
}

// One node in the list
if ( tmp->Next() == NULL ) {
cout << tmp->Data();
cout << " --> ";
cout << "NULL" << endl;
}
else {
// Parse and print the list
do {
cout << tmp->Data();
cout << " --> ";
tmp = tmp->Next();
}
while ( tmp != NULL );

cout << "NULL" << endl;
}
}

如果列表无限增加或者错误来自 Print 函数,我会感到困惑...抱歉,也许是虚拟错误。谢谢。

最佳答案

你的问题是这两行:

tmp->SetNext(newNode);
newNode->SetNext(tmp->Next());

你应该扭转他们。现在,你设置 tmp.next = newNode,然后 newNode.next = tmp.next (= newNode),所以 newNode 指向它自己。然后遍历 newNode 导致无限循环。

关于c++ - 单排序链表 - 无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12381143/

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