質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

解決済

線形リストを用いた問題がわかりません。

Red_Bull
Red_Bull

総合スコア19

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

3回答

0評価

0クリップ

321閲覧

投稿2021/12/16 05:46

編集2021/12/16 05:55

特定の値のノードを削除する関数 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; }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

jimbe

2021/12/16 05:54

terminal と書かれている個所は言語名を書く所です。 画面出力等では plain としてください。
Red_Bull

2021/12/16 06:12

似たような課題をやっていますが、、躓いているところが異なるので教えていただきたいです。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。