#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

typedef struct node {
    int data;
    struct node* next;
} node_type;

node_type* create_node(int data)
{
    node_type* node = (node_type*)malloc(sizeof(node_type));
    if (node != NULL) {
        node->data = data;
        node->next = NULL;
    }
    return node;
}

node_type* preceding_node(node_type* head, int data)
{
    node_type* x = NULL;
    node_type* ptr;

    for (ptr = head; ptr != NULL; ptr = ptr->next) {
        if (ptr->data < data)
            x = ptr;
        else
            break;
    }

    return x;
}

node_type* insert_sorted(node_type** head, int data)
{
    node_type* x = preceding_node(*head, data);
    node_type* newnode = create_node(data);

    if (!newnode) return NULL;
    
    if (x == NULL) {
        newnode->next = *head;
        *head = newnode;
    }
    else {
        newnode->next = x->next;
        x->next = newnode;
    }

    return newnode;
}

void print_list(node_type* head)
{
    for (; head; head = head->next)
        printf("%d->", head->data);

    printf("NULL\n");
}

void delete_all(node_type** head)
{
    node_type* ptr, * temp;

    for (ptr = *head; ptr; ptr = temp) {
        temp = ptr->next;
        free(ptr);
    }

    *head = NULL;
}

int main(int argc, char* argv[])
{
    node_type* head = NULL;

    int i, value;

    for (i = 1; i < argc; i++) {
        sscanf(argv[i], "%d", &value);
        insert_sorted(&head, value);
    }

    print_list(head);
    delete_all(&head);

    return 0;
}

 

이번 학기 마지막 퀴즈입니다. 수고하셨습니다.