【问题标题】:Creating a linked list with a for loop使用 for 循环创建链表
【发布时间】:2014-03-06 21:16:12
【问题描述】:

这是我的结构

struct ListItem{

    int data;
    struct ListItem *next;

};

假设链表的第一个节点的数据 = 0,我想编写一个 for 循环来创建一个大小为 5 的链表,但我不确定如何工作

我尝试了以下

int main(int argc, char* argv[]){

    struct ListItem a;
    a.data = 0;


    for (int i = 1; i < 5; i++){
        struct ListItem *pointer = &a;
        struct ListItem nextnode;
        nextnode.data = i;
        a.next = &nextnode;
        pointer = pointer->next;

    }
}

但结果是 a.数据 = 0 和 a.next->data = 4

【问题讨论】:

  • 您正在引用本地(下一个节点),这样做是不正确的 - 您需要为您创建的每个节点分配内存(并在完成后释放它)。你熟悉 C 中的内存分配吗?
  • 每次循环时,你也将'pointer'设置为链表中的第一个节点,所以节点0指向节点4也就不足为奇了(N[0]->N[4 ])。内存管理部分是更大的问题。

标签: c for-loop struct linked-list singly-linked-list


【解决方案1】:

不要修改 a.取一个以 a 开头的临时节点。使其成为新节点的下一个点,然后将临时节点设置为新节点。也在堆中动态分配。否则每次循环运行后内存都会被释放

【讨论】:

  • 我明白为什么这会起作用,但我不确定如何用语法编写它
  • node * tempnode = &a for(int i=1; ival=i;临时节点->下一个=下一个;临时节点=下一个; }
【解决方案2】:
struct ListItem a[5] = { {0, NULL}};
struct ListItem *pointer = &a[0];

for (int i = 0; i < 5; i++){
    a[i].data = i;
    if(i != 5 -1)
        a[i].next = &a[i+1];
}

【讨论】:

    猜你喜欢
    • 2014-03-06
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    相关资源
    最近更新 更多