【发布时间】:2016-03-01 04:34:58
【问题描述】:
我想打印一个这样的链表:
0 1 2 3 4
12 24 36 85 48
我当前的代码是
void LinkedList::printList()
{
curr = head; //store head in curr to irerate
int count = 0; //counter to help uer manipulate list
while (curr != NULL) //traverse whole list
{
cout << count++ <<"\t"; //print index
curr = curr->next; //move to next
}
curr = head; //make current head again
cout << endl;//go to next line
while (curr != NULL) //traverse whole list
{
cout << curr->data << "\t"; //print data
curr = curr->next; //move to next
}
cout << endl;
}
我很确定还有另一种方法可以做到这一点,这是一种更简单、更快捷的方法。我想减少这段代码的冗余。
我正在显示计数器以帮助用户添加或删除数字。
【问题讨论】:
-
数据中的数字有多大,您是否每 5 个数字打印一次?
-
更新代码是固定大小的链表?我在提出解决方案时假设了这一点
-
鉴于您的列表很小(如果它很大,显示输出的屏幕也必须很大;)),您可以使用 1 次遍历而不是 2 次遍历并使用 2 个实例
std::ostringstream,可以同时创建计数和元素值字符串,然后在循环结束后输出。 -
如果你想打印换行输出,你会在小块中工作。在将列表移至
max_per_line并打印索引(检查NULL)时保存指向当前位置的指针。然后打印一个换行符并再次遍历列表。或者,不要重新遍历列表,而是将要打印的列表数据复制到一个小数组中。或者像 BitTickler 建议的那样即时格式化。这确保即使是长列表也不会导致问题,因为您只会对它们进行小块操作。 -
@TahTatsumoto 它只是用于练习的东西,所以不是很大。
标签: c++ performance c++11 optimization time-complexity