fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct node {
  5. int val;
  6. struct node *next;
  7. } Node;
  8.  
  9. Node *head = NULL;
  10.  
  11. Node* createN(int x) {
  12. Node *newnode = (Node *)malloc(sizeof(Node));
  13. newnode->val = x;
  14. newnode->next = NULL;
  15. return newnode;
  16. }
  17.  
  18. void freeL() {
  19. Node *p;
  20. while (head != NULL) {
  21. p = head->next;
  22. free(head);
  23. head = p;
  24. }
  25. }
  26.  
  27. void printL() {
  28. Node *p = head;
  29. while (p != NULL) {
  30. printf("%d ", p->val);
  31. p = p->next;
  32. }
  33. printf("\n");
  34. }
  35.  
  36. void makeL(int n, int a[]) {
  37. for (int i = 0; i < n; i++) {
  38. Node *newNode = createN(a[i]); // 新しいノードを作成
  39. if (head == NULL || head->val >= newNode->val) {
  40. // 挿入位置が先頭の場合
  41. newNode->next = head;
  42. head = newNode;
  43. } else {
  44. // 挿入位置を探索
  45. Node *p = head;
  46. while (p->next != NULL && p->next->val < newNode->val) {
  47. p = p->next;
  48. }
  49. // 現在のノード `p` の後に挿入
  50. newNode->next = p->next;
  51. p->next = newNode;
  52. }
  53. }
  54. }
  55.  
  56. int main(void) {
  57. int i, n;
  58. int *a;
  59. scanf("%d", &n);
  60. a = (int *)malloc(sizeof(int) * n);
  61. for (i = 0; i < n; i++) {
  62. scanf("%d", &a[i]);
  63. }
  64. makeL(n, a);
  65. printL();
  66. freeL();
  67. free(a);
  68. return 0;
  69. }
Success #stdin #stdout 0.01s 5288KB
stdin
8
21 55 5 13 8 2 34 3
stdout
2 3 5 8 13 21 34 55