Node *orderedInsert(Node *p, int newval)
/* Allocates a new Node with data value newval
and inserts into the ordered list with
first node pointer p in such a way that the
data values in the modified list are in
nondecreasing order as the list is traversed.
*/
{
Node* current = NULL;
Node* prev = NULL;
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->next = NULL;
newNode->data = newval;
if(newNode == NULL)
printf("Could not allocate memory for new node");
current = p;
if(p == NULL){
current = newNode;
newNode->next = NULL;
newNode->data = newval;
return newNode;
}
else if(newval < p->data){
newNode->next = p;
p = newNode;
return p;
}
else{
prev = p;
current = current->next;
while(newNode->data > current->data && current != NULL){
prev = current;
current = current->next;
}
if(current == NULL){
prev->next = newNode;
newNode->next = NULL;
}
else{
newNode->next = current;
prev->next = newNode;
}
}
}
void printList(FILE *outfile, Node *p)
/* Prints the data values in the list with
first node pointer p from first to last,
with a space between successive values.
Prints a newline at the end of the list.
*/
{
Node* current = p;
while(current != NULL){
fprintf(outfile, "%d ",current->data);
current = current->next;
}
fprintf(outfile, "\n");
}
int main(int argc, char * argv[])
{
assert(argc == 3);
Node * p = NULL;
int newval, retval;
int op;
FILE *in = fopen(argv[1],"r");
assert(in != NULL);
FILE *out = fopen(argv[2],"w");
assert(out != NULL);
do {
op = fgetc(in);
} while (op != EOF && isspace(op));
while(op != EOF && op != 'q') {
switch(op) {
case 'i':
fscanf(in,"%d",&newval);
p = orderedInsert(p,newval);
printList(out,p);
printList(stdout,p);
break;
case 'c':
clearList(&p);
break;
default:
fclose(in);
fclose(out);
return 0;
}
do
op = fgetc(in);
while (op != EOF && isspace(op));
}
fclose(in);
fclose(out);
return 0;
}
我在调试带有此错误的代码时遇到问题。有没有什么明显的我在我的代码中缺少和/或你有任何提示调试这个错误?我只是觉得自己失去了开始的地方,除了它甚至没有超过第一个列表条目(当列表是空的时候)。排除链接列表中的段错误(核心转储)
感谢
编辑:我都忍了修改后的代码,并输入数字比在列表中的第一大时,我现在只得到了段错误。
线15'如果(newNode = NULL)',应该是:'如果(newNode == NULL)'(比较) – vsnyc
卫生署!不再..谢谢你的帮助。我应该删除这个问题吗?我不知道这个网站的礼仪。 – MS535
它有一个upvote所以你可以保留它,我会添加答案,你可以接受,因为它是有用的。干杯! – vsnyc