c++ - C++ 中的单链表
问题描述
我有将项目添加到链表并打印它们的源代码。现在“print()”函数从头到尾打印项目。有2个问题:1.“99”是链表中的第一项吗?2.如果“11”是链表中的第一项,我如何设置链表的起始位置从第一个打印?
#include <iostream>
using namespace std;
class Node
{
public:
int data;
Node *next;
};
Node *head = NULL;
int *start = &head->data; // Get start of linked list
void insert(int data)
{
Node *new_node = new Node();
new_node->data = data;
new_node->next = head;
head = new_node;
}
void display()
{
Node *ptr;
ptr = head;
while (ptr != NULL)
{
cout<< ptr->data << " ";
ptr = ptr->next;
}
}
int main()
{
for (int i = 11; i <= 100; i += 10)
insert(i);
cout<< "Setting head->data address...";
&head->data = start;
cout<< "[ OK ]\n";
cout<< "The linked list is: ";
display();
cout<< endl;
return 0;
}
解决方案
1) 如果for
插入元素的那个循环真的应该以 结束i += 11
,那么是的,99
是列表中的第一个元素。
2) 列表如下所示99 -> 88 -> ... -> 22 -> 11
。没有办法从11
to 22
,你只能在一个方向遍历列表。这是list
数据结构的一个特点。
如果您需要以与插入元素相同的顺序打印元素,则需要在列表的末尾插入,而不是在前面。因为这head
还不够,您需要另一个指向列表的指针,一个指向末尾的指针,我们称之为tail
. insert()
然后将以与现在tail
使用的方式大致相同的方式使用head
(它根本不会接触或改变head
)。
推荐阅读
- nativescript - 如何使用 Nativescript 获取设备的序列号?
- sql - 删除数据库中除一条以外的所有记录
- php - 将网页结果转换为 PHP
- sql - SQL:导出到 XML 将数字数据重新格式化为科学计数法
- javascript - Django - 如何将模板中的变量作为 POST 请求返回到视图
- java - Eclipselink 忽略 persistence.xml 中的 javax.persistence.jdbc.driver 和 javax.persistence.jdbc.url 属性
- javascript - HTML 视频播放器 (Fluid Player) 播放多个视频
- git - git结帐
不适用于特定分支 - sql - 在 SQL Server 中使用 over()
- c# - 模拟器构建已被取消