此代码具有许多功能,它们都可以工作,但不能称为位置功能。当我输入字符“ i”时,我应该能够先输入位置,然后输入数字,该数字将在链接列表的第n个位置插入数字,而且我不知道我的代码有什么问题,主要是位置函数,它输入位置和号码后崩溃。
#include <stdio.h>
#include <stdlib.h>
struct list {
int info ;
struct list *next ; /* self reference */
};
struct list* position(struct list **head, int data, int pos) {
if ((!head) || (pos < 0)) return NULL;
struct list *h = *head;
struct list *prev = NULL;
for(int i = 0; i < pos; ++i) {
if (!h) return NULL;
prev = h;
h = h->next;
}
struct list *p = (struct list *) malloc(sizeof(struct list));
if (!p) return NULL;
p->info = data;
p->next = h;
if (prev) prev->next = p;
if (*head == h) *head = p;
return p;
}
struct list * deleteNode(struct list *my_list)
{
struct list *remove;
if(my_list != NULL)
{
remove= my_list;
my_list = (my_list)->next; //this removes head node from the list
free(remove);
}
return my_list;
}
void print_list ( struct list *my_list ) {
struct list *p ;
for ( p = my_list ; p ; p = p -> next ) { //this prints the list
printf ("%d ", p -> info ) ;
}
printf("\n");
}
struct list *push_front ( struct list * my_list , int value ) {
struct list *newel ;
newel = ( struct list *) malloc ( sizeof ( struct list )); //pushes the element to the front
if ( newel == NULL ) {
printf (" Error allocating memory \n");
return my_list ;
}
newel -> info = value ;
newel -> next = my_list ;
return newel ;
}
struct list * push_back ( struct list * my_list , int value ) {
struct list * cursor , * newel ;
cursor = my_list ;
newel = ( struct list *) malloc ( sizeof ( struct list ));//pushes the element to the back
if ( newel == NULL ) {
printf (" Error allocating memory \n");
return my_list ;
}
newel -> info = value ;
newel -> next = NULL ;
if ( my_list == NULL )
return newel ;
while ( cursor -> next != NULL )
cursor = cursor -> next ;
cursor -> next = newel ;
return my_list ;
}
void dispose_list ( struct list * my_list ) {
struct list * nextelem ;
while ( my_list != NULL ) { //disposes the memory
nextelem = my_list -> next ;
free ( my_list ) ;
my_list = nextelem ;
}
}
int main () {
char input;
int info, position1;
struct list *my_list = NULL ;
for(; ;)
{
scanf("%c", &input);
switch(input)
{
case 'i':
scanf("%d", &position1);
scanf("%d", &info);
my_list=position(my_list, info, position1);
break;
case 'b':
scanf("%d", &info);
my_list=push_front(my_list, info);
break;
case 'a':
scanf("%d", &info);
my_list=push_back(my_list, info);
break;
case 'p':
print_list(my_list);
break;
case 'q':
dispose_list(my_list);
exit(0);
break;
case 'r':
my_list=deleteNode(my_list);
break;
}
}
}**