如何在LinkedList中使用指针将节点设置为参数?

问题描述 投票:0回答:1

Linkedin中有两个函数:insert_first和testLinkedList_inser_first。 结构如下所示。

#pragma pack(push, 1)
typedef struct ColumInfo {
    char name[MAX_LENGTH];
    char phone[MAX_LENGTH];
}ColumInfo;
#pragma pack(pop)

#pragma pack(push, 1)
typedef struct ListNode {
    struct ColumInfo columinfo;
    struct ListNode* pNext;
}ListNode;
#pragma pack(pop)

insert_first 函数看起来像这样

ListNode* insertFirst(ListNode* head, ColumInfo value) {
    ListNode* added = (ListNode*)malloc(sizeof(ListNode));

    strcpy(added->columinfo.name, value.name);
    strcpy(added->columinfo.phone, value.phone);
    added->pNext = head;

    head = added;

    return added;
}

testLinkedList_insertFirst函数如下所示。 testLinkedList_insertFirst函数以*node和nNum为参数,测量执行插入函数nNum次所需的时间。

double testLinkedList_insertFirst(ListNode* node, int nNum) {
    clock_t start = clock();

    for (int i = 0; i < nNum; ++i) {
        char name[MAX_LENGTH] = "samyoahri";
        char phone[MAX_LENGTH] = "010-xxxx-xxxx";

        sprintf(name, "samyoahri: %d", i);
        sprintf(phone, "010-xxxx-xxxx: %d", i);

        ColumInfo data;
        strcpy(data.name, name);
        strcpy(data.phone, phone);

        node = insertFirst(node, data);
        //printList(node);
        //printf("==============\n");
    }
    clock_t end = clock();
    return (double)(end - start) / CLOCKS_PER_SEC;
}

但是,insert_first 函数正确返回节点。但是,testLinkedList_insertFirst 函数正确返回双精度值,但是当我想使用引用调用来更新节点时,testLinkedList 函数无法正常工作。 我该如何解决这个问题? 下面,您可以看到在 testLinkedList_insertFirst 函数中节点已正确更新。 但是,在主语句中,您可以看到节点没有正确更新。 enter image description here enter image description here

链接:https://github.com/samyoahri/PhoneBook

我尝试使用 malloc、指针更新参数。

c pointers data-structures
1个回答
0
投票

从函数

LinkedList1
返回时,不会设置
LinkedList2
testLinkedList_insertFirst()
变量,除非您从函数内部返回指向结构体的指针或从
main()
传递变量的地址。

您可以通过指向堆上分配的结构的指针从函数返回传递的时钟以及创建的链表:

typedef struct {
    double clockpassed;
    ListNode * chain;
} ret_type ;

ret_type * testLinkedList_insertFirst(ListNode* node, int nNum) {

clock_t start = clock();
 
ret_type * retvals;
retvals = malloc (sizeof(ret_type));
retvals->clockpassed = (double) (end - start);
        ...
        ...
        ...
retvals->chain = node;
return retvals;

}

© www.soinside.com 2019 - 2024. All rights reserved.