2012-09-16 72 views
0

我想要做的是修改簡單的鏈表到目前爲止我有一個函數來輸入一個名稱,然後輸出相反的順序,但我在更改特定位置的字符時遇到問題。C++簡單鏈表修改

主要代碼:

#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給我一個地址,但不是一個列表,我不知道什麼是錯的。

此外,如何改變字符不同於插入和刪除字符。 感謝您的任何幫助

回答

1

插入=追加一個字符到列表;刪除=從列表中刪除一個字符

我希望那些會很明顯。

更改某個位置需要您將列表移動到該位置。你可以迭代或遞歸地做,你的選擇。假設你的職位是基於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; 
}