我正在尝试查找在链接列表中形成单词的节点列表。所以它是这样的:I->a->n-> ->i->s-> ->a->w-e>s->o->m->e->NULL
。目标是将其替换为类似 I->a->n-> ->i->s-> ->c->o->o->l->NULL
的内容。我们希望这样做,无论被替换的单词或替换它的单词的大小如何。
我尝试遍历索引并删除该单词,然后通过索引替换它。然而,这使事情变得复杂,而且我从来没有真正得到我正在寻找的词。
我现在只是尝试删除要替换的单词,现在我尝试简单地将节点的单词替换为形成新单词的新节点。
我现在正在尝试操纵数组大小,看看这是否允许我输入单词。
void indexInsert(char character, int n){
node* temp1 =(node*)malloc(sizeof(struct node));
temp1->character = character;
temp1->nextNode = NULL;
if(n == 1){
temp1->nextNode = headNode;
headNode = temp1;
return;
}
node* temp2 = headNode;
for(int i = 0; i < n-2; i++){
temp2 = temp2->nextNode;
}
temp1->nextNode = temp2->nextNode;
temp2->nextNode = temp1;
}
void replaceWord(char replaceWord[]) {
deleteWord(&headNode, replaceWord);
int Size = 1;
int Size2 = 2;
char entryWord[Size];
char entryWordCopy[Size2];
printf("Please enter the new word you wish to insert: ");
strcpy_s(entryWordCopy, Size2,gets_s(entryWord, Size));
printf("\n");
int length = strlen(entryWordCopy);
indexInsert(entryWordCopy, length);
Print(head);
}
最终结果应该是删除形成单词 A 的节点,然后被形成单词 B 的节点替换。但是,在执行程序时,我遇到了大小数组的问题,并且未评估我的字符串。返返回告:失败是由于在其生命周期之外读取变量引起的。
最佳答案
我的提示: 不要对列表使用索引,您可以对指向节点的指针执行相同的操作。您不必迭代索引,指向节点的指针更快。
您应该更改算法以使用指向节点的指针:
查找最后一个单词: 遍历列表,如果找到一个空格的节点,则将指向该节点的指针存储在变量中,如果到达列表的末尾,则记住的指向该节点的指针是最后一个单词之前的空格。您只需更改以下节点即可。如果您从未找到包含空格的节点,您可以简单地用替换项替换整个列表。
另一个技巧是使用双指针,它将指针存储到指向最后一个单词的节点的指针。 (这也可能是列表的根)
// node** p is a pointer to the pointer of the first element
// if your root is defined as `node* root`, you use
// `... = last_word(&root);`
node** last_word(node** p) {
node* n = *p;
while(n) {
if(n->data == ' ') p = &n->next;
n = n->next;
};
return p;
};
插入节点:
你从像last_word
这样的算法中得到了一个指针,它是一个指向节点的指针。它指向变量,该变量存储指向下一个节点的指针(有一个关于此的 ComputerPhile 视频),这完全处理开头、结尾和中间的插入:
void insert(node** p, char c) {
node* elem = (node*)malloc(sizeof(node));
elem->data = c;
elem->next = *p; // connect to following node
*p = elem; // connect previous node/root to the node
};
如果您确实需要使用索引,您应该始终将代码拆分为单独的函数。
node** node_by_index(node** p, int index) {
while(index > 0) {
p = &(*p)->next;
--index;
};
return p;
};
关于c - 尝试替换由 C 中链表中的节点组成的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55593078/