連結リストにおける重複要素の削除方法について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
hanoha1631
記事: 5
登録日時: 2年前

連結リストにおける重複要素の削除方法について

#1

投稿記事 by hanoha1631 » 2年前

ソートされていない連結リストから重複する要素を削除するコードを自分なりに書いてみましたがコンパイルを突破できません。ミスの指摘をお願いしたいです。

コード:

#include<stdio.h>

typedef struct data{
  int x;
  struct data *next;
}DATA

DATA *current=NULL,*current2=NULL;
void delete(DATA*);

DATA d,d1,d2,d3,d4;
int count=0;
current=d;
current2=d;
d.next=&d1;
d1.next=&d2;
d2.next=&d3;
d3.next=&d4;
d4.next=NULL;
d1.x=1;
d2.x=2;
d3.x=3;
d4.x=4;

int main(){
  printf("%d %d %d %d\n",d.next->data,d.next->next->data,d.next->next->next->data, d.next->next->next->next->data);
  
  current=d1;
  current2=d1;
  while(1){
    while(1){
      if(current.x==current2.x)count++;
      if(current2.next==NULL)break;
      current2=current2.next;
    }
    current2=d1;
    if(count>=2){
      count=0;
      while(1){
	if(current.x==current2.x){
	  count++;
	  if(count==1){
	    delete(current2.next);
	    count=0;
	  }
	  if(current2.next==NULL)break;
	  current2=current2.next;
	}
      }
      current=current.next;
    }
    else current=current.next;
  }
  
  current=d;
  while(1){
    printf("%d ",curent.next->x);
    if(current.next==NULL)break;
    current=current.next;
  }
  printf("\n");
  return 0;
}

void delete(DATA *current2){
  DATA prev=d;
  while(1){
    if(prev.next->next==current2.next){
      prev.next->next=current2.next;
      break;
    }
    if(prev.next->next==NULL)break;
    prev=prev.next;
  }
}


box
記事: 2002
登録日時: 13年前

Re: 連結リストにおける重複要素の削除方法について

#2

投稿記事 by box » 2年前

コード:

}DATA
ここにセミコロンがなくていいんですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 13年前

Re: 連結リストにおける重複要素の削除方法について

#3

投稿記事 by box » 2年前

コード:

current=d;
current2=d;
DATA型の値をDATA *型へ代入しようとしていますが、正しいですか?

コード:

printf("%d %d %d %d\n",d.next->data
構造体にdataっていうメンバーはありませんが、いいんですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

返信

“C言語何でも質問掲示板” へ戻る