特定の値のノードを削除する関数 void delX(int x) を実装したいのですがわかりません。
具体的には、入力された数字を数列の何番目かを探すという部分の処理がわからないので教えていただきたいです。
手順は以下の通りです。
1.数列の要素数を入力
2.要素を入力
3.削除する数字を入力
4.入力した数字が削除された数列をprint
terminalは成功した際の出力結果です。
plain
15 21 4 67 2 3 367 41 4 2 3
c
1#include <stdio.h> 2#include <stdlib.h> 3 4typedef struct node { 5 int val; 6 struct node *next; 7}Node; 8 9Node *head = NULL; 10 11Node* 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 19void 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 32void freeL() { 33 Node *p; 34 while(head!=NULL){ 35 p = head->next; 36 free(head); 37 head = p; 38 } 39} 40 41void printN(Node *a) { 42 if(a == NULL) printf("NULL\n"); 43 else printf("%d\n",a->val); 44} 45 46void printL() { 47 Node *p = head; 48 while(p != NULL){ 49 printf("%d ",p->val); 50 p = p->next; 51 } 52 printf("\n"); 53} 54 55Node* getN(int n) { 56 int i; 57 Node *p; 58 p = head; 59 for(i=1;i<n;i++) p = p->next; 60 return p; 61} 62 63int countL() { 64 int ret = 0; 65 Node *p = head; 66 while(p!=NULL){ 67 p = p->next; 68 ret++; 69 } 70 return ret; 71} 72 73Node* searchX(int x) { 74 Node *p; 75 for(p=head; p!=NULL; p=p->next){ 76 if(p->val == x) break; 77 } 78 return p; 79} 80 81void insHead(int x) { 82 Node *p; 83 p = createN(x); 84 p->next = head; 85 head = p; 86} 87 88void insMiddle(int n, int x) { 89 int i; 90 Node *p,*q; 91 p = head; 92 for(i=1;i<n;i++){ 93 p = p->next; 94 } 95 q = createN(x); 96 q->next = p->next; 97 p->next = q; 98} 99 100void insTail(int x) { 101 Node *p; 102 p = head; 103 if(p==NULL){ 104 head = createN(x); 105 return; 106 } 107 while(p->next != NULL){ 108 p = p->next; 109 } 110 p->next = createN(x); 111} 112 113void delHead() { 114 Node *p; 115 p = head; 116 head = head->next; 117 free(p); 118} 119 120void delMiddle(int n) { 121 int i; 122 Node *p,*q; 123 p = head; 124 for(i=1;i<n-1;i++){ 125 p = p->next; 126 } 127 q = p->next; 128 p->next = q->next; 129 free(q); 130} 131 132void delTail() { 133 Node *p; 134 p = head; 135 while(p->next->next != NULL){ 136 p = p->next; 137 } 138 free(p->next); 139 p->next = NULL; 140} 141 142void delX(int x) { 143 int i; 144 Node *p,*q; 145 p = head; 146 147 if(*p==x){ 148 for(i=1;i<x-1;i++) { 149 p = p->next; 150 q = p->next; 151 p->next = q->next; 152 free(q); 153 } 154 } 155} 156 157int main(void) { 158 int i,n,x; 159 scanf("%d",&n); 160 initL(n); 161 scanf("%d",&x); 162 delX(x); 163 printL(); 164 freeL(); 165 return 0; 166}
どちらの学校の課題なのでしょうか。
[C言語 教えてください] https://teratail.com/questions/374056
https://teratail.com/questions/374056
関数名とかが同じっぽいので同類かと思う.
参考になるんじゃない?
terminal と書かれている個所は言語名を書く所です。
画面出力等では plain としてください。
似たような課題をやっていますが、、躓いているところが異なるので教えていただきたいです。
回答3件
あなたの回答
tips
プレビュー