C++利用一个数组(首地址和最后一个元素的下一个地址)创建一个链表
#include <iostream>
using namespace std;
int main() {
int arr[] = { 4, 7, 2, 1, 5 }; // 数组存储链表节点值
int n = sizeof(arr) / sizeof(arr[0]); // 计算数组长度
int *head = &arr[0]; // 链表头指针指向数组第一个元素
int *tail = &arr[n - 1]; // 链表尾指针指向数组最后一个元素
// 将数组最后一个元素的下一个指针指向NULL
*(tail + 1) = NULL;
// 将链表头指针指向第二个元素
*(head + 1) = arr[0];
// 从第三个元素开始,将每个元素的下一个指针指向下一个元素
for (int i = 2; i < n; i++) {
*(arr + i - 1) = *(arr + i);
}
// 将最后一个元素的下一个指针指向NULL
*(arr + n - 2) = NULL;
// 输出链表元素
while (*head != NULL) {
cout << *head << " ";
head++;
}
cout << endl;
return 0;
}
在这个示例代码中,我们首先定义一个数组,存储链表节点的值。然后,我们计算数组的长度,并定义一个指向数组第一个元素的指针head和一个指向数组最后一个元素的下一个指针的指针tail。接着,我们将数组最后一个元素的下一个指针指向NULL,并将链表头指针指向第二个元素。然后,我们从第三个元素开始,将每个元素的下一个指针指向下一个元素。最后,我们将最后一个元素的下一个指针指向NULL。这样,我们就创建了一个简单的链表。最后,我们使用一个循环遍历链表并输出每个节点的值。
typedef struct t
{
int num;
struct t *next;
} TT;
int main()
{
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int *p = a, *q = a + sizeof(a) / sizeof(a[0]);
TT t = {0}, *tmp, *tt = &t;
while (p < q)
{
tmp = (TT *)malloc(sizeof(TT));
tmp->next = NULL;
tmp->num = *p;
tt->next = tmp;
tt = tmp;
p++;
}
tt = t.next;
while (tt)
{
cout << tt->num << " ";
tt = tt->next;
}
return 0;
}
【以下回答由 GPT 生成】
我可以通过以下步骤来帮助你使用C++数组创建一个链表:
struct Node {
int data;
Node* next;
};
Node* head = new Node(); // 创建一个空的头节点
head->next = nullptr; // 初始化头节点的指针
// 假设你已经有一个数组 arr,有一个起始地址和最后一个元素的下一个地址 end
Node* current = head; // 将当前节点指向头节点
for (int i = 0; i < arrSize; i++) {
Node* newNode = new Node(); // 创建一个新的节点
newNode->data = arr[i]; // 将数组元素赋值给节点的数据部分
newNode->next = nullptr; // 初始化节点的指针部分
current->next = newNode; // 将当前节点的指针指向新的节点
current = newNode; // 将当前节点指向新的节点,以便下次循环使用
}
Node* temp = head->next; // 将临时节点指向第一个真正的节点
while (temp != nullptr) {
cout << temp->data << " "; // 打印节点的数据
temp = temp->next; // 移动到下一个节点
}
这样,你就可以使用C++数组创建一个链表了。请确保内存管理,当你不再需要链表时,记得手动释放每个节点的内存,以避免内存泄漏。
如果你还有其他的问题,欢迎提问!
【相关推荐】