如何使用Leetcode上的函数原型在链表的开头添加新节点?

如何使用Leetcode上的函数原型在链表的开头添加新节点?,c,linked-list,C,Linked List,我正在Leetcode上用C重新创建链表。 我正在列表顶部添加一个新节点 因为指令是: /** * Your MyLinkedList struct will be instantiated and called as such: * MyLinkedList* obj = myLinkedListCreate(); * myLinkedListAddAtHead(obj, val); **/ 所以我想主要应该是这样的:(我们现在忽略内存泄漏) 我使用指针对指针的方式提出了以下解决方案

我正在Leetcode上用C重新创建链表。
我正在列表顶部添加一个新节点
因为指令是:

/**
 * Your MyLinkedList struct will be instantiated and called as such:
 * MyLinkedList* obj = myLinkedListCreate();

 * myLinkedListAddAtHead(obj, val);
**/
所以我想主要应该是这样的:(我们现在忽略内存泄漏)

我使用指针对指针的方式提出了以下解决方案:

#include <stddef.h>
#include <stdlib.h>

typedef struct MyLinkedList_s
{
    int data;
    struct MyLinkedList_s *next;
} MyLinkedList;

MyLinkedList* create() 
{
    MyLinkedList *node;

    node = (MyLinkedList *)malloc(sizeof(MyLinkedList));
    if (!node)
        return (NULL);
    node = NULL;
    return (node);
}

void myLinkedListAddAtHead(MyLinkedList **obj, int val) 
{
    MyLinkedList *tmp;

    tmp = (MyLinkedList *)malloc(sizeof(MyLinkedList));
    if (!tmp)
        return ;
    tmp->data = val;
    tmp->next = *obj;
    *obj = tmp;
}

问题是,无论我以前采用哪种方式,它都不符合函数原型。如何使用以下命令将新节点添加到链表中:
void mylinkedlistaddahead(MyLinkedList*obj,int val)
,知道
MyLinkedList*head
是在main创建的。c:

int main(void)
{
    MyLinkedList *head;

    head = create();
    return (0);
}


一种可能的方法是让列表不仅仅是一个节点。例如,您可以使用

struct Node {
    int val;
    struct Node *next;
};

struct MyLinkedList {
    struct Node *head;
    /* and optionaly depending on requirements:
    struct Node *tail;
    int nb; */
};
然后它就变得微不足道了:

struct MyLinkedList * myLinkedListCreate() {
    MyLinkedList *obj = malloc(sizeof(*obj));
    obj->head = NULL;
}

void myLinkedListAddAtHead(MyLinkedList *obj, int val) 
    Node *node = malloc(sizeof(*node));
    node->val = val;
    node->next = obj->head;
    obj->head = node;
}
struct Node {
    int val;
    struct Node *next;
};

struct MyLinkedList {
    struct Node *head;
    /* and optionaly depending on requirements:
    struct Node *tail;
    int nb; */
};
struct MyLinkedList * myLinkedListCreate() {
    MyLinkedList *obj = malloc(sizeof(*obj));
    obj->head = NULL;
}

void myLinkedListAddAtHead(MyLinkedList *obj, int val) 
    Node *node = malloc(sizeof(*node));
    node->val = val;
    node->next = obj->head;
    obj->head = node;
}