C++利用一个数组(首地址和最后一个元素的下一个地址)创建一个链表

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++数组创建一个链表:

  1. 首先,你需要定义一个链表节点的结构体。每个节点包含两部分:数据(数组中的元素)和指向下一个节点的指针。
struct Node {
    int data;
    Node* next;
};
  1. 然后,你需要创建一个链表的头节点,作为链表的起始点。
Node* head = new Node(); // 创建一个空的头节点
head->next = nullptr; // 初始化头节点的指针
  1. 接下来,你需要遍历数组,将数组中的每个元素都添加到链表中。
// 假设你已经有一个数组 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; // 将当前节点指向新的节点,以便下次循环使用
}
  1. 最后,你可以遍历链表,将链表的数据打印出来,以验证链表是否正确创建。
Node* temp = head->next; // 将临时节点指向第一个真正的节点

while (temp != nullptr) {
    cout << temp->data << " "; // 打印节点的数据
    temp = temp->next; // 移动到下一个节点
}

这样,你就可以使用C++数组创建一个链表了。请确保内存管理,当你不再需要链表时,记得手动释放每个节点的内存,以避免内存泄漏。

如果你还有其他的问题,欢迎提问!



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^