В настоящее время я пытаюсь создать алгоритм, который создает единый связанный список и сортирует его в порядке возрастания (пользовательский ввод n и цифры).
Я могу создать список нормально, но когда я пытаюсь поменять местами значение 2 узлов, это дает выходы, ошибка сегментации. У меня есть сильное чувство, что это связано с моей динамически распределенной памятью для узлов, но я очень плохо знаком с программированием, поэтому я мог бы использовать любую помощь, чтобы найти ошибку
#include <stdio.h>
#include <stdlib.h>
struct node {
int val;
struct node *next;
}*node_st;
void createlist (int n) {
struct node *fnNode, *temp;
int i, num;
node_st = (struct node *)malloc(sizeof(struct node));
if (node_st == NULL) {
printf("Memory allocation fault!");
exit(0);
}
else {
printf("Input data for node 1:");
scanf("%d",&num);
node_st->val =num;
node_st->next = NULL;
temp = node_st;
for (i=2;i<=n;i++) {
fnNode = (struct node *)malloc(sizeof(struct node));
if (fnNode == NULL) {
printf("Memory allocation fault!");
break;
}
else {
printf("input data for node %d : ", i);
scanf("%d",&num);
fnNode->val = num;
fnNode->next = NULL;
temp->next = fnNode;
temp = temp->next;
}
}
}
}
void showlist() {
struct node *temp;
if (node_st == NULL) {
printf("List is empty..");
}
else {
temp = node_st;
while (temp != NULL) {
printf("Value = %d \n",temp->val);
temp = temp->next;
}
}
}
void sort(int n) {
struct node *temp;
struct node *temp2;
if (node_st == NULL) {
printf("List is empty..");
}
else {
temp = node_st;
temp2 = temp->next;
while (temp != NULL) {
if (temp->val > temp2->val) {
printf("test!!!");
temp = temp2;
temp2 = temp->next;
}
}
}
}
int main(void) {
int n,a,x,y,z;
printf("Input amount of nodes you want");
scanf("%d",&n);
createlist(n);
printf("Data entered: \n");
showlist();
sort(n);
return 0;
}
aplogize in advance for the messy code, again im new and havent cleaned it up 100%.