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;
  13. newnode = (Node *)malloc(sizeof(Node));
  14. newnode->val = x;
  15. newnode->next = NULL;
  16. return newnode;
  17. }
  18.  
  19. void initL(int n){
  20. int x, i;
  21. Node *p;
  22. scanf("%d", &x);
  23. head = createN(x);
  24. p = head;
  25. for(i = 1; i < n; i++){
  26. scanf("%d", &x);
  27. p->next = createN(x);
  28. p = p->next;
  29. }
  30. }
  31.  
  32. void freeL(){
  33. Node *p;
  34. while(head != NULL){
  35. p = head->next;
  36. free(head);
  37. head = p;
  38. }
  39. }
  40.  
  41. void printL(){
  42. Node *p = head;
  43. while(p != NULL){
  44. printf("%d ", p->val);
  45. p = p->next;
  46. }
  47. printf("\n");
  48. }
  49.  
  50. void delX(int x){
  51. Node *p = head;
  52. Node *prev = NULL;
  53.  
  54. while(p != NULL){
  55. if(p->val == x){
  56. if(p == head){ // 頭の要素を削除
  57. head = p->next;
  58. free(p);
  59. p = head;
  60. } else {
  61. prev->next = p->next;
  62. free(p);
  63. p = prev->next;
  64. }
  65. } else {
  66. prev = p;
  67. p = p->next;
  68. }
  69. }
  70. }
  71.  
  72. int main(void){
  73. int n, x;
  74. scanf("%d", &n); // ノード数
  75. initL(n); // リスト作成
  76. scanf("%d", &x); // 削除対象の値
  77. delX(x); // ノード削除
  78. printL(); // 結果表示
  79. freeL(); // メモリ解放
  80. return 0;
  81. }
  82.  
Success #stdin #stdout 0s 5320KB
stdin
4
1 3 5 7
3
stdout
1 5 7