分配新节点后根节点的值(空值)没有改变

The value of root node(null value) didn't change after assigning a new node

目前正在尝试写链表,但是遇到了问题。 当我执行下面的代码时,它只是打印

Current state:

所以我用gdb发现当我把"iHead = newNode"和return赋值给main时,head的值没有变化! 问题是相对于路过 value/reference 还是其他什么???

#include <stdio.h>
#include <stdlib.h>

typedef struct node *nodePtr;
struct node{
    int value;
    nodePtr next;
};

void print(nodePtr);
void insert(nodePtr, int);


int main(void){
    nodePtr head = NULL;

    insert(head, 1);
    insert(head, 2);
    insert(head, 3);
    insert(head, 4);
    insert(head, 5);

    print(head);

    return 0; 
}

void print(nodePtr iHead){
    nodePtr ptr = iHead;

    printf("Current state:");
    while(ptr){
        printf("%d ", ptr->value);
        ptr = ptr->next;
    }
    printf("\n");
}

void insert(nodePtr iHead, int iValue){
    nodePtr newNode;

    newNode = (nodePtr) malloc(sizeof(struct node));
    newNode->value = iValue;
    newNode->next = NULL;

    if(iHead == NULL)
        iHead = newNode;
    else{
        //find the last node
        nodePtr ptr = iHead;
        while(ptr -> next)
            ptr = ptr->next;

        //append new node
        ptr -> next = newNode;
    }
}

您正在按值传递。

因此在函数内完成的更改不会反映在 main() 中。有两种方法可以解决这个问题。

  1. void insert(nodePtr *iHead, int iValue)

通过引用传递给这个函数

  1. nodePtr insert(nodePtr iHead,int iValue)

在函数中进行更改 return HEAD

main() 中让你的列表 HEAD 完好无损

nodePtr HEAD = insert(HEAD,2);