我有一个关于替换链表中的字符的问题。如果我有一个包含要通过长度大于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;
抱歉这个烂摊子。
答案 0 :(得分:0)
如果您有以下节点序列:
a -> n -> a -> d
并且您希望将a
替换为A -> N -> D
,因为您需要创建三个节点:A
,N
和D
每次出现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;
}
}
我在这里做的是每次匹配字符时创建三个列表元素,并用新列表替换包含匹配字符的节点。