Невозможно поменять узлы в одном связанном списке - PullRequest
0 голосов
/ 29 октября 2019

В настоящее время я пытаюсь создать алгоритм, который создает единый связанный список и сортирует его в порядке возрастания (пользовательский ввод 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%.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...