特定の値のノードを削除する関数 void delX(int x) を実装したいのですがわかりません。
具体的には、入力された数字を数列の何番目かを探すという部分の処理がわからないので教えていただきたいです。
手順は以下の通りです。
1.数列の要素数を入力
2.要素を入力
3.削除する数字を入力
4.入力した数字が削除された数列をprint
terminalは成功した際の出力結果です。
plain
5 1 4 67 2 3 67 1 4 2 3
c
#include <stdio.h> #include <stdlib.h> typedef struct node { int val; struct node *next; }Node; Node *head = NULL; Node* createN(int x) { Node *newnode; newnode = (Node *)malloc(sizeof(Node)); newnode->val = x; newnode->next = NULL; return newnode; } void initL(int n) { int x,i; Node *p; scanf("%d",&x); head = createN(x); p = head; for(i=1;i<n;i++){ scanf("%d",&x); p->next = createN(x); p = p->next; } } void freeL() { Node *p; while(head!=NULL){ p = head->next; free(head); head = p; } } void printN(Node *a) { if(a == NULL) printf("NULL\n"); else printf("%d\n",a->val); } void printL() { Node *p = head; while(p != NULL){ printf("%d ",p->val); p = p->next; } printf("\n"); } Node* getN(int n) { int i; Node *p; p = head; for(i=1;i<n;i++) p = p->next; return p; } int countL() { int ret = 0; Node *p = head; while(p!=NULL){ p = p->next; ret++; } return ret; } Node* searchX(int x) { Node *p; for(p=head; p!=NULL; p=p->next){ if(p->val == x) break; } return p; } void insHead(int x) { Node *p; p = createN(x); p->next = head; head = p; } void insMiddle(int n, int x) { int i; Node *p,*q; p = head; for(i=1;i<n;i++){ p = p->next; } q = createN(x); q->next = p->next; p->next = q; } void insTail(int x) { Node *p; p = head; if(p==NULL){ head = createN(x); return; } while(p->next != NULL){ p = p->next; } p->next = createN(x); } void delHead() { Node *p; p = head; head = head->next; free(p); } void delMiddle(int n) { int i; Node *p,*q; p = head; for(i=1;i<n-1;i++){ p = p->next; } q = p->next; p->next = q->next; free(q); } void delTail() { Node *p; p = head; while(p->next->next != NULL){ p = p->next; } free(p->next); p->next = NULL; } void delX(int x) { int i; Node *p,*q; p = head; if(*p==x){ for(i=1;i<x-1;i++) { p = p->next; q = p->next; p->next = q->next; free(q); } } } int main(void) { int i,n,x; scanf("%d",&n); initL(n); scanf("%d",&x); delX(x); printL(); freeL(); return 0; }
どちらの学校の課題なのでしょうか。
[C言語 教えてください] https://teratail.com/questions/374056
https://teratail.com/questions/374056
関数名とかが同じっぽいので同類かと思う.
参考になるんじゃない?
terminal と書かれている個所は言語名を書く所です。
画面出力等では plain としてください。
似たような課題をやっていますが、、躓いているところが異なるので教えていただきたいです。
まだ回答がついていません
会員登録して回答してみよう