C Linked List with Sentinel - 获取对节点的访问
C Linked List with Sentinel - Getting Access to nodes
我正在努力完成这项任务(实施链表)。我试图建立一个所谓的哨兵,这会让它变得更容易。我的问题是,如何访问实际元素?我试图打印根值 (44),但我只得到了奇怪的值。我假设这些是内存地址(例如 6893440)。
#include<stdio.h>
struct node {
int val;
struct node* next;
};
struct node** init() {
struct node **l;
l = malloc(sizeof(struct node**));
*l = NULL;
return l;
}
void insert(struct node** l, int val) {
struct node* p;
if(*l == NULL) {
p = malloc(sizeof(struct node));
p->val = val;
p->next = *l;
*l = p;
}
}
void main() {
struct node* list;
list = init();
insert(list, 44); // create a (root)node with value 44
printf("%d", list->val); // e.g. 6893440
}
非常感谢您的帮助。
您应该将列表声明为指向节点的双指针。
struct node** list;
然后你可以用
访问第一个节点的值
(*list)->val
更多信息:
在 C 中的列表等数据类型的实现中,我们经常使用 2 个 typedef 来帮助提高代码的可读性并消除大量星号和符号。它们是:
typedef struct node* ListNode;
typedef ListNode* List;
通过这样做,您可以通过以下方式简单地声明一个列表:
List list;
请注意,通过适当替换 struct node*
和 struct node**
,列表函数的实现也变得更具可读性。
我正在努力完成这项任务(实施链表)。我试图建立一个所谓的哨兵,这会让它变得更容易。我的问题是,如何访问实际元素?我试图打印根值 (44),但我只得到了奇怪的值。我假设这些是内存地址(例如 6893440)。
#include<stdio.h>
struct node {
int val;
struct node* next;
};
struct node** init() {
struct node **l;
l = malloc(sizeof(struct node**));
*l = NULL;
return l;
}
void insert(struct node** l, int val) {
struct node* p;
if(*l == NULL) {
p = malloc(sizeof(struct node));
p->val = val;
p->next = *l;
*l = p;
}
}
void main() {
struct node* list;
list = init();
insert(list, 44); // create a (root)node with value 44
printf("%d", list->val); // e.g. 6893440
}
非常感谢您的帮助。
您应该将列表声明为指向节点的双指针。
struct node** list;
然后你可以用
访问第一个节点的值(*list)->val
更多信息:
在 C 中的列表等数据类型的实现中,我们经常使用 2 个 typedef 来帮助提高代码的可读性并消除大量星号和符号。它们是:
typedef struct node* ListNode;
typedef ListNode* List;
通过这样做,您可以通过以下方式简单地声明一个列表:
List list;
请注意,通过适当替换 struct node*
和 struct node**
,列表函数的实现也变得更具可读性。