2013-06-29 70 views
0

我有一個鏈表包括像這樣的字符...插入一個鏈表到另一個鏈表

node1 - "p" 
    node2 - "o" 
     node3 - "p" 

我需要一個函數,將採取三種perameters ...

node *replaceChar(node *head, char key, char *str) 

這個函數的規定。 head是列表的頭部,'key'和'str'只保證包含字母數字字符(A-Z,a-z和0-9)。 str的範圍可以從1到1023個字符(包含)。

所以,如果我調用此函數與這些perameters ..

node *head == /*the head of the list to be examined*/ 

char key == "p" 

char *str == "dog" 

新的名單看起來就像這樣......

node1 - 'd' 
    node2 - 'o' 
     node3 - 'g' 
      node4 - 'o' 
       node5 - 'd' 
        node6 - 'o' 
         node7 - 'g' 

「P」的所有實例都以「家的狗'

我有一個toString函數,它接受一個字符串並將其轉換爲鏈接列表並返回頭部。因此,假設您可以撥打海峽=「狗」的功能,所以...

toString(str) == /*this will return the head to the list made from the str*/ 

如果還不清楚我的問題是什麼...我難倒就如何寫replaceChar功能一個發生在三個參數..我可以使用字符串創建一個新的列表,並找到所有鍵的實例,但是使新列表適合舊列表而不丟失指針正在殺死我。

我曾經嘗試這樣做......

while(head->data != NULL) 
    { 
     if(head->data == key) 
      { 
       node *newListHead = toString(str); 

       head = newListHead; 

       /*here I lose track of the old list*/ 
+2

而你遇到的問題是? –

+0

我在問題主體的最後幾行重申了我的問題。 – FunkyT

+0

我不知道... @JoachimPileborg –

回答

0

你可以這樣開始:

node *replaceChar(node *head, char key, char *str) 
{ 
    node *cur, prev; 
    for (cur = head, prev = NULL; cur != NULL; prev = cur, cur = cur->next) 
     if (cur->ch == key) { 
      node *hstart = toString(str); 
      for (node *hend = hstart; hend->next != NULL; hend = hend->next) 
       ; 
      if (prev == NULL) 
       head = hstart; 
      else 
       prev->next = hstart; 
      hend->next = cur->next; 
      free(cur); 
     } 

} 

我的假設: 您的節點結構是這樣的:

sturct node { 
    char ch; 
    struct node* next; 
}; 

toString(str)作品非常好。