Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.87 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4.  
  5. #define DEBUG if(0)
  6.  
  7. typedef struct Node Node;
  8.  
  9. struct Node
  10. {
  11.   int item;
  12.   Node *next;
  13. };
  14.  
  15. Node* create_linked_list()
  16. {
  17.   return NULL;
  18. }
  19.  
  20. Node* add(Node *head, int item)
  21. {
  22.   Node *new_node = (Node *) malloc(sizeof(Node));
  23.   new_node -> item = item;
  24.   new_node -> next = head;
  25.   return new_node;
  26. }
  27.  
  28. Node* sort(Node *head, int size)
  29. {
  30.   while(size--)
  31.   {
  32.     Node *current = head;
  33.     bool is_head = true;
  34.     Node *previous = NULL;
  35.     while(current -> next != NULL)
  36.     {
  37.       if(is_head)
  38.       {
  39.         if(current -> item > current -> next -> item)
  40.         {
  41.           Node *temp = current -> next -> next;
  42.           Node *aux = current -> next;
  43.           current -> next -> next = current;
  44.           current -> next = temp;
  45.           head = aux;
  46.         }
  47.         previous = current;
  48.         current = current -> next;
  49.         is_head = false;
  50.       }
  51.       else
  52.       {
  53.         if(current -> item > current -> next -> item)
  54.         {
  55.           if(current -> next -> next != NULL)
  56.           {
  57.             Node *temp = previous -> next;
  58.             Node *temp2 = current -> next -> next;
  59.             previous -> next = current -> next;
  60.             current -> next -> next = temp;
  61.             temp -> next = temp2;
  62.           }
  63.         }
  64.         previous = current;
  65.         current = current -> next;
  66.       }
  67.     }
  68.   }
  69.   return head;
  70. }
  71.  
  72. /*void swap(Node *head, Node *nodeA, Node *nodeB)
  73. {
  74.  
  75. }*/
  76.  
  77. void printar(Node *head)
  78. {
  79.   while(head != NULL)
  80.   {
  81.     printf("%d%c", head -> item, (head -> next == NULL) ? '\n' : ' ');
  82.     head = head -> next;
  83.   }
  84. }
  85.  
  86. int main()
  87. {
  88.   int n, size = 0;
  89.   Node *list = create_linked_list();
  90.   while(scanf("%d", &n) != EOF)
  91.   {
  92.     size++;
  93.     list = add(list, n);
  94.   }
  95.   list = sort(list, size);
  96.   printar(list);
  97.   return 0;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement