【发布时间】:2016-10-13 22:52:30
【问题描述】:
我有一个非常基本的单链表实现。然而,我的实现的问题是它在列表的开头打印了一个额外的零,而我没有明确地为这个额外的节点分配任何存储空间。相同的代码如下 -
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define LEN 7
/* List node data structure */
typedef struct _ll_node_ {
int data;
struct _ll_node_ *next;
} node;
/*
* @brief Utility to print the state of the list
*/
void print_list(node *head)
{
int i = 0;
node *tmp = head;
while (tmp)
{
printf("Node:\t%d,\tValue:\t%d\n", ++i, tmp->data);
tmp = tmp->next;
}
printf("\n");
}
/*
* @brief Utility to add nodes to the list
*/
node *add_node(node *head, int data)
{
node *tmp;
if (head == NULL)
{
head = malloc(sizeof(node));
assert(head != NULL);
head->data = data;
head->next = NULL;
}
else
{
tmp = head;
while (tmp->next)
tmp = tmp->next;
tmp->next = malloc(sizeof(node));
assert(tmp->next != NULL);
tmp = tmp->next;
tmp->data = data;
tmp->next = NULL;
}
return head;
}
/*
* @brief Driver function
*/
int main(int argc, char *argv[])
{
node *head = NULL;
int i = 0;
/* Allocate memory */
head = malloc(LEN * sizeof(node));
assert(head != NULL);
/* Populate the list */
for (; i < LEN; i++)
head = add_node(head, rand() % 1000);
/* Print its state */
print_list(head);
return 0;
}
有人可以帮我找出我做错了什么吗?
System information:
Distributor ID: Ubuntu
Description: Ubuntu 14.04.3 LTS
Release: 14.04
Codename: trusty
【问题讨论】:
-
评论这两行
head = malloc(LEN * sizeof(node)); assert(head != NULL);,其余一切都很好。
标签: c pointers linked-list malloc singly-linked-list