对于处理递归的赋值,我们应该读入文件的值,并将变量存储到链表中。这里唯一的问题是,对于这个特定的任务,我们不能拥有全球头脑。教授。在课堂上向我们展示了如何在本地创建链表的头部。只是,我没有时间写下来。现在,我试图在作业上取得进展,因为我无法将内容存储在链接列表中或遍历它,因此我无法弄清楚如何不使用全局头部。
我通常会像这样建立结构和头部:
struct node
{
int head;
struct node *next;
}*head;
但我不能为我的生活找出如何在没有头的情况下做到这一点。
我知道它可能与双指针
有关 **head
答案 0 :(得分:0)
there needs to be a 'first' pointer for the linked list.
As I understand your problem, only a global head pointer is dis-allowed.
so put the head pointer on the stack in the main() function
and pass the address of that pointer (not the pointer contents)
to each of the functions that need access to it.
答案 1 :(得分:0)
“双指针”,“非全局头指针”。您使用头部的本地指针和附加的双指针,示例代码:
node * head;
node **ppnode = &head; // pointer to head or to .next
node * pnode;
// ...
pnode = new ...
pnode-> ...
pnode->next = 0;
*ppnode = pnode; // set head or a next pointer
ppnode = &(pnode->next); // advance ppnode
答案 2 :(得分:0)
节点定义为:
struct node
{
int data;
struct node *next;
};
无论如何,在同一个声明中声明变量和类型是不好的方式。然后在main()
中:
struct node *head=NULL;
然后按原样继续。
答案 3 :(得分:0)
这是没有全局头的样本链表。
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node *next;
};
void insert(struct node **head, int val) {
struct node *new = (struct node *)malloc(sizeof(struct node));
new->data = val;
if(*head)
new->next = *head;
*head = new;
}
void print_list(struct node *list) {
while(list) {
printf("%d\n", list->data);
list = list->next;
}
}
int main(void)
{
struct node *head = NULL;
insert(&head, 1);
insert(&head, 2);
insert(&head, 3);
print_list(head);
return 0;
}