如何使用Leetcode上的函数原型在链表的开头添加新节点?
我正在Leetcode上用C重新创建链表。如何使用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); **/ 所以我想主要应该是这样的:(我们现在忽略内存泄漏) 我使用指针对指针的方式提出了以下解决方案
我正在列表顶部添加一个新节点
因为指令是:
/**
* 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;
}