每个行在此链接列表程序中的作用是什么?

时间:2013-12-11 01:36:27

标签: c linked-list computer-science

这是我正在处理的链接列表,并试图弄清楚每条线的确切含义。我似乎在学习如何编程的方式非常困难,而且我非常沮丧。无论如何,我理解链接列表是如何工作的,但我不理解代码说的是什么以及它是如何创建结构的。例如:我无法理解你为什么要指定一个指向节点(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;
        }
    }
}

4 个答案:

答案 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)

指针只是告诉你价值在哪里,比如电话号码,你可以打电话给任何人,无论你有谁,因为你知道数字。指针可以指向你想要的任何东西(在你的访问权限下) ,无论是int还是struct。

答案 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