Я пишу программу для ознакомления со связанными списками, и при попытке вставить новую ссылку в конец списка значение, похоже, не сохраняется. Я предполагаю, что это связано с локальной переменной, не сохраняемой в переменную, переданную в функцию.
Рассматриваемая функция:
int insertAtTail(int intBeingAdded, List *userList){
while(userList->next != NULL){
userList = userList->next;
}
List *newLink = (List *)malloc(sizeof(List));
userList->next = newLink;
newLink->next = NULL;
newLink->value = intBeingAdded;
return 1;
}
Весь файл:
#include "stdio.h"
#include "stdlib.h"
typedef struct list{
int value;
struct list * next;
} List;
List * initIntegerList(void);
int insertAtHead(int intBeingAdded, List *userList);
int insertAtTail(int intBeingAdded, List *userList);
void printList(List *userList);
int main(void){
List *myList;
myList = initIntegerList();
insertAtHead(2, myList);
insertAtHead(1, myList);
insertAtTail(6, myList);
printList(myList);
freeList(myList);
}
List * initIntegerList(void){
List * listPointer = (List *)malloc(sizeof(List));
if(listPointer != NULL){
listPointer->next = NULL;
return listPointer;
}else{
printf("Memory not available for allocation\n");
return listPointer;
}
}
int insertAtHead(int intBeingAdded, List *userList){
List *previousHead = (List *)malloc(sizeof(List));
if(previousHead != NULL){
previousHead->value = intBeingAdded;
previousHead->next = userList->next;
userList->next = previousHead;
return 1;
}
return 0;
}
int insertAtTail(int intBeingAdded, List *userList){
while(userList->next != NULL){
userList = userList->next;
}
List *newLink = (List *)malloc(sizeof(List));
userList->next = newLink;
newLink->next = NULL;
newLink->value = intBeingAdded;
return 1;
}
void printList(List *userList){
printf("Values in list: ");
List *currentLink = userList;
while(currentLink->next != NULL){
printf(" %d", currentLink->value);
currentLink = currentLink->next;
}
printf("\n");
}
Вывод, который я вижу, хранится только в 0,1,2, а 6 не делает этого.