0

私がやろうとしているのは、単純なリンクリストを変更することです。これまでのところ、名前を入力してから逆順で出力する機能がありますが、特定の場所で文字を変更するのに問題があります。

メインコード:

#include "list.h"
#include "string"
using namespace std;
int main(){
    cout<<"What is your name \n";
    string name;
    getline(cin,name);

    Node *list;

    list = new_list();                           
    for (int i=0; i<name.length();i++){
    insert_front(&list,name[i]);
    }                              
    print_list(list);                    
    int p;
    char x;
    cout<<"Change the position: ";
    cin>>p;
    cout<<"\n to the character " ;
    cin>>x;
    change_char(list, x, p);
    print_list(list);
    return 0;
}

そして私のlist.cpp

#include "list.h"                            
Node* new_list(){
    Node* list = 0;
    return list;
}
void insert_front(Node** plist,char x){
    Node* t;
    t = new Node;
    t->x = x;
    t->next = *plist;
    *plist = t;
    return;
}
void print_list(Node* list){
    Node* p;
    p = list;
    if(p == 0)
        cout << "--- empty list ---" << endl;
    while(p !=0){
        cout << p->x<<" -- ";
        p = p->next;
    }
    cout << endl;
}
void delete_front(Node** plist){
    Node* t;
    if( !is_empty(*plist) ){                            
        t = (*plist)->next;
        *plist = (*plist)->next;
        delete t;
    }
}
void delete_list(Node** plist){
    while( !is_empty(*plist) )                         
        delete_front(plist);
}
bool is_empty(Node* list){
    return (list == 0);                            
}
void change_char(Node* plist, char x, int p){
    Node* s;
    s=(plist->next);
      cout<<s<<endl;
      cout<<plist<<endl;
 return;

特定の位置でキャラクターを変更する方法にスタックしています。change_char はアドレスを返しますが、リストは返しません。何が悪いのかわかりません。

また、文字の変更は、文字の挿入と削除とどのように異なるでしょうか。助けてくれてありがとう

4

1 に答える 1

1

挿入 = リストに char を追加します。削除 = リストから文字を削除する

それらが明らかであることを願っています。

位置を変更するには、リストをその位置まで移動する必要があります。繰り返しまたは再帰的に行うことができます。ポジションが 1 ベース (0 ベースではなく) であると仮定します (このコードはテスト コンパイルされていないため、自己責任で使用してください)。

void change_char(Node* plist, char x, int p)
{
    Node* s = plist;
    for (int i=1; i<p && 0!=s;i++)
       s = s->next;
    if (0 != s)
       s->x = x;
}
于 2012-09-16T23:34:12.400 に答える