You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

代码中`head->next = second;`的工作原理及链表指针赋值疑问

链表节点指针赋值逻辑解析

先把你的代码整理成可直接阅读的版本:

#include <stdio.h>
#include <stdlib.h>
struct node
{
    int data;
    struct node *next;
};

int main()
{
    struct node *head;
    struct node *second;
    struct node *third;
    head = (struct node *)malloc(sizeof(struct node));
    second = (struct node *)malloc(sizeof(struct node));
    third = (struct node *)malloc(sizeof(struct node));

    head->data = 1;
    head->next = second;

    second->data = 2;
    second->next = third;

    third->data = 3;
    head->next = NULL;

    return 0;
}

针对你问的head->next = second;这行代码,拆解一下逻辑:

  1. 先明确几个基础概念:

    • struct node结构体里的next是一个指针变量,它的作用就是存储另一个struct node类型节点的内存地址。
    • head是一个指针,它指向你用malloc分配的第一个节点(一块独立的内存空间)。head->next就是直接访问这个第一个节点里的next成员。
    • second同样是一个指针,它存储的是第二个节点的内存地址(malloc分配的第二块独立空间)。
  2. 这行代码的执行逻辑:
    就是把second指针里存的第二个节点的内存地址,直接赋值给head指向的第一个节点的next成员。
    换句话说,做完这步操作后,第一个节点的next指针就指向了第二个节点,两者就被“链”在了一起——你可以通过head->next直接访问到第二个节点的内容。

  3. 纠正你的误解:
    不存在“head指向next”这回事。head本身就是指向第一个节点的指针,next只是第一个节点内部的一个成员,用来记录下一个节点的位置。

另外提一句,你代码最后一行head->next = NULL;会把之前的链接覆盖掉,这会导致第一个节点和第二个节点的关联被切断,虽然第二、第三个节点的内存还在,但你没法通过head去访问它们了。

内容的提问来源于stack exchange,提问作者Ashitosh bendre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 07:05:44