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


  当前状态:


因此,我使用gdb并发现当我分配“ iHead = newNode”并返回到main时,head的值没有改变!
问题是相对于通过值/引用传递还是其他?

#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()中。有两种解决方法。


void insert(nodePtr *iHead, int iValue)


通过引用传递给该功能


nodePtr insert(nodePtr iHead,int iValue)


在函数中进行更改并返回HEAD

main()中完整保留您的列表HEAD

nodePtr HEAD = insert(HEAD,2);

10-08 07:36