【发布时间】:2015-01-08 17:22:00
【问题描述】:
当我在列表中添加一个比任何内容都大的数字时,我遇到了这个运行时错误。我不明白为什么。我认为代码应该只添加包含数字的节点并将空指针称为下一个节点。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Node{
int value;
struct Node * next;
};
typedef struct Node Node;
void front(int, Node**);
void print(Node*);
void add(Node**,int);
Node**place(Node**,int);
void verwijder(Node**, int);
void clearList(Node**);
int main () {
int i;
Node * l = 0;
front(10,&l);
front(5,&l);
front(1,&l);
add(&l,9);
add(&l,5);
add(&l,11);
verwijder(&l,5);
verwijder(&l,9);
verwijder(&l,1);
clearList(&l);
free(l);
print(l);
}
void front(int number,Node ** start ) {
Node * new = malloc(sizeof(Node));
new->value = number;
new->next = *start;
*start = new;
}
Node** place(Node ** start, int number){
while((*start)->value < number && (*start) != 0) {
start = &((*start)->next);
}
return start;
}
void add(Node ** start, int number) {
Node ** space = place(start,number);
Node * new = malloc(sizeof(Node));
new->value = number;
new->next = *space;
*space = new;
}
void verwijder(Node ** start, int number) {
Node**space = place(start,number);
Node * delete = *space;
if(delete->value == number) {
*space = (*space)->next;
}
free(delete);
}
void print(Node * l) {
while( l != 0) {
printf("%i -> ",(l)->value);
l = (l)->next;
}
printf("0 \n");
}
void clearList(Node** start) {
Node * current = *start;
while(current != 0) {
*start = (*start)->next;
free(current);
current = *start;
}
free(current);
}
【问题讨论】:
-
在函数
place中检查列表中的项目是否小于number的任何原因?此外,为了避免总是遍历列表来添加项目,最好跟踪最后一个节点,即尾部。在这种情况下,您可以改为在O(1)中执行此操作。 -
我希望对新添加的元素进行排序,因此我会检查何时获得比我愿意添加的元素更高的元素,并将指针指向该节点。
-
你有没有设法插入任何项目?
-
项目似乎被添加,只要它们不超过最高数字的值。