特定の単一リンクリストの方向を逆にするプログラムを作成します。言い換えると、反転後、すべてのポインターが逆方向を指すようになります。
私は上記の問題を解決しようとしています。単一リンクリストの挿入、検索、削除、印刷の機能を作成しました。
私の印刷機能は次のとおりです
void print(list **l)
{
list *p=*l;
for(int i=0;p;i++)
{
cout<<p->item<<endl;
p=p->next;
}
}
リスト内のすべての値を正常に出力します。
しかし、私がこのように同じ割り当てを行う場合、メイン関数で
list *p=*l;
セグメンテーション違反が発生します。私の主な機能は次のとおりです
main()
{
list **l;
*l=NULL;
int n;
while(cin>>n)
insert(l,n);
list *p=*l;
list *prev=NULL;
list *next;
while(p)
{
next=p->next;
p->next=prev;
prev=p;
if(next==NULL)
*l=p;
p=next;
}
print(l);
}
私の挿入機能は次のとおりです
void insert(list **l,int x)
{
list *p;
p=(list *)malloc(sizeof(list));
p->item=x;
p->next=*l;
*l=p;
}
印刷機能とメイン機能で行う割り当ての違いは何ですか?印刷機能でエラーが発生せず、メイン機能でセグメンテーション違反が発生するのはなぜですか?
私の関数がこのような場合
main()
{
list **l;
*l=NULL;
int n;
while(cin>>n)
insert(l,n);
print(l);
}
リストの値を挿入して印刷することができますが、エラーは発生しません。