Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdbool.h>
- #define DEBUG if(0)
- typedef struct Node Node;
- struct Node
- {
- int item;
- Node *next;
- };
- Node* create_linked_list()
- {
- return NULL;
- }
- Node* add(Node *head, int item)
- {
- Node *new_node = (Node *) malloc(sizeof(Node));
- new_node -> item = item;
- new_node -> next = head;
- return new_node;
- }
- Node* sort(Node *head, int size)
- {
- while(size--)
- {
- Node *current = head;
- bool is_head = true;
- Node *previous = NULL;
- while(current -> next != NULL)
- {
- if(is_head)
- {
- if(current -> item > current -> next -> item)
- {
- Node *temp = current -> next -> next;
- Node *aux = current -> next;
- current -> next -> next = current;
- current -> next = temp;
- head = aux;
- }
- previous = current;
- current = current -> next;
- is_head = false;
- }
- else
- {
- if(current -> item > current -> next -> item)
- {
- if(current -> next -> next != NULL)
- {
- Node *temp = previous -> next;
- Node *temp2 = current -> next -> next;
- previous -> next = current -> next;
- current -> next -> next = temp;
- temp -> next = temp2;
- }
- }
- previous = current;
- current = current -> next;
- }
- }
- }
- return head;
- }
- /*void swap(Node *head, Node *nodeA, Node *nodeB)
- {
- }*/
- void printar(Node *head)
- {
- while(head != NULL)
- {
- printf("%d%c", head -> item, (head -> next == NULL) ? '\n' : ' ');
- head = head -> next;
- }
- }
- int main()
- {
- int n, size = 0;
- Node *list = create_linked_list();
- while(scanf("%d", &n) != EOF)
- {
- size++;
- list = add(list, n);
- }
- list = sort(list, size);
- printar(list);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement