替换大小长度的字符> 2在链表中

时间:2014-03-30 13:16:47

标签: arrays string list linked-list character

我有一个关于替换链表中的字符的问题。如果我有一个包含要通过长度大于2的字符串更改的节点值的链接列表,我将如何实现迭代执行此操作?这是我的逻辑:

if (node->data == key)
   ptr = node->next
   node->data = string_ptr->data
   node->link = string_ptr->link

然后我会通过node->链接直到我到达节点的末尾然后连接

node->link = ptr

因此将我带回原始链表。

我想要实现的目标是:

说我有这个词:a -> n -> a -> d 键是a,替换键的字符串是A -> N -> D 因此,我应该得到:A -> N -> D -> n -> A -> N -> D -> d

但我明白了:A -> n -> A -> d

编辑:这是使用的结构:

struct node 

{ 

   char data; 

   struct node *next; 

} node;

抱歉这个烂摊子。

1 个答案:

答案 0 :(得分:0)

如果您有以下节点序列:

a -> n -> a -> d

并且您希望将a替换为A -> N -> D,因为您需要创建三个节点:AND每次出现a元素。 代码看起来像这样:

struct node *tmp, *next_bak;
char char_to_replace = a;
char string[] = "AND";

while(node->next != NULL) {
    if (node->data == char_to_replace) {
        next_bak = node->next;
        tmp = malloc(sizeof(struct node*));
        tmp->data = string[0];

        for(int i = 1; i < strlen(string); i++) {
            tmp->next = malloc(sizeof(struct node*));
            tmp->next->data = string[i];
            tmp = tmp->next;    
        }

        tmp->next = next_bak;
    }
}

我在这里做的是每次匹配字符时创建三个列表元素,并用新列表替换包含匹配字符的节点。