这是我正在处理的链接列表,并试图弄清楚每条线的确切含义。我似乎在学习如何编程的方式非常困难,而且我非常沮丧。无论如何,我理解链接列表是如何工作的,但我不理解代码说的是什么以及它是如何创建结构的。例如:我无法理解你为什么要指定一个指向节点(13和14)的指针,特别是当我对指针的理解是它们用于存储内存位置时。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct numnode
{
int val;
struct numnode * next;
};
typedef struct numnode node;
main()
{
int i;
node * head;
node * newnode;
head = NULL;
for (i = 1; i <= 10; i++)
{
newnode = (node *) malloc(sizeof(node));
newnode->val = i;
newnode->next = NULL;
if (head == NULL)
{
head = newnode;
}
else
{
newnode->next = head;
head = newnode;
}
}
}
答案 0 :(得分:2)
以下是一些注释(以及减少代码量的小编辑)。
/* Linked list node definition */
struct node {
int val;
struct node * next;
};
int main() {
int i;
struct node *head, *new_node;
head = NULL;
for (i = 1; i <= 10; i++) {
// Allocate a new node and initialize its components (val and next)
new_node = (struct node *) malloc(sizeof(node));
new_node->val = i;
new_node->next = NULL;
// The if block is actually not necessary...
if (head == NULL) {
// If the linked list is empty, set the head pointer to the initial node
head = new_node;
} else {
// Now that you have your new node, connect it. Start:
// head->[current linked list]
// [new_node.next]->NULL
new_node->next = head;
// head->[current linked list]->...
// [new_node.next]->[current linked list]->...
head = newnode;
// head->[new_node.next]->[current linked list]->...
}
}
}
关键是malloc
返回指向内存的指针。每个新节点都是动态分配的,因此是内存中的一个位置(不是基本类型)。
答案 1 :(得分:0)
如果您修复PakkuDon指出的语句,您会发现代码插入到头部。最终会得到一个列表,其值从9下降到1。
答案 2 :(得分:0)
答案 3 :(得分:0)
以下是此代码的摘要:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct numnode
{
int val;
struct numnode * next;
};
typedef struct numnode node;
main()
{
int i;
node * head;
node * newnode;
head = NULL;
for (i = 1; i <= 10; i++)
{
newnode = (node *) malloc(sizeof(node));
newnode->val = i;
newnode->next = NULL;
if (head == NULL) // It'll be NULL first time, as head = NULL.
{
// True @ i = 1
head = newnode;
}
else // Afterwards, as head=newnode
{
// New node will be created every time. Till i <= 10.
newnode->next = head;
head = newnode;
}
}
}
虽然这是一个简单的代码。
PS:head == NULL