在做牛客网中这个题目时遇到了一个奇怪的现象,for循环中初始化对象一直是一个地址,所以链表被指的乱七八糟,造成死循环,在此记录
答案参考这位大神
#include<iostream>
using namespace std;
class LinkList {
public:
LinkList(int _num) : num(_num), next(NULL) {}
int num;
LinkList *next;
};
int main() {
LinkList *head = NULL, *prev;
int m;
cin >> m;
int nums[m];
for(int i = 0; i < m; ++i)
cin >> nums[i];
for(int i = 0; i < m; ++i)
{
for(int n = 1; n <= nums[i]; ++n)
{
// 一开始我这样初始化变量,程序一直死循环,打印地址后发现每次l的地址都是一样的
// LinkList l(n);
// 改成这样初始化之后就解决了问题
LinkList *l = new LinkList(n);
if(head == NULL)
head = l;
else
prev->next = l;
l->next = NULL;
prev = l;
}
prev->next = head;
while(head->next != head){
for(int i = 1; i < 3; ++i)
{
// 向前一步
prev = prev->next;
// 向前一步
head = head->next;
}
cout << head->num << " ";
// 向前一步
head = head->next;
// 闭合
prev->next = head;
}
cout << head->num << endl;
head = NULL;
}
return 0;
}
总结:
- 动态初始化n个对象使用new方式创建
- 代码中创建单个对象使用ClassName varName方式