前提・実現したいこと
双方向リスト(double linked list)でユーザーにより与えられた位置のノードを削除する関数を書いています。
ノードの位置は前から数えます。
本当はノードの追加や表示する関数もあり、main関数でスイッチ文で選択式となっていますが,
コードが長くなるためそれらの関数の実装とともに省かせていただきます。
##例1
削除前リスト: "sasaki" - "takara" -"Mochi" -"Sushi"
削除死体ノードの位置 :2
削除後のリスト: "sasaki" -"Mochi" -"Sushi"
##例2
削除前リスト: "sasaki"
削除死体ノードの位置 :2
printf("削除できません")
削除後のリスト: "sasaki"
該当のソースコード
C言語名
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4#define SIZE 100 5 6typedef struct listelement { 7 char name[1000]; 8 struct listelement *next; 9 struct listelement *previous; 10} Node; 11Node *head = NULL; 12 13void deletePosition( ) 14{ 15 Node *ptr, *current; 16 int position; 17 current = head; 18 if(current ==NULL)//リストが空の場合終了 19 { 20 printf("リストは空です。\n"); 21 return; 22 } 23 printf("消したい位置のノードの数を入力してください\n"); 24 scanf("%d",&position); 25 int i; 26 27 while(current->next !=NULL)//最後まで 28 { 29 current = current -> next; 30 } 31 32 if(position==1)//最初の場合 33 { 34 current = current->next; 35 current->previous =NULL; 36 printf("%s",current->name); 37 free(current); 38 return; 39 } 40 41 if(current !=NULL)//それ以外の場合 42 { 43 current->previous->next = current->next; 44 current->next->previous =current->previous; 45 free(current); 46 } 47 48 49} 50int main(){ 51 deletePosition(); 52 return 0; 53 54} 55 56
試したこと
最初もしくは最後のノードを消す場合などのケースを考えていましたがずっとSeg faultが出力され悩んでいます。
補足情報(FW/ツールのバージョンなど)
gcc 9.3 ubuntu 20.04
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。