C语言链表实现:在指定元素X的紧邻位置复制插入相同元素
实现思路
- 首先从用户处获取需要复制的目标数值X
- 从第一个有效节点开始遍历链表:
- 若当前节点数值等于X,创建新节点复制X的值,插入到当前节点的紧邻后方
- 插入完成后直接跳过刚插入的新节点,避免重复遍历导致无限插入
- 若当前节点数值不等于X,直接移动到下一个节点即可
完整实现代码
你只需要替换空的duplicate函数即可,代码如下:
// Duplicate X values in the list void duplicate(Node *lista){ if(empty(lista)){ printf("链表为空,无法执行复制操作\n"); return; } int X; printf("\n请输入需要复制的元素X:"); scanf("%d", &X); Node *curr = lista->next; // 跳过头节点,从第一个有效节点开始遍历 while(curr != NULL){ if(curr->x == X){ // 创建新节点 Node *new_node = (Node *)malloc(sizeof(Node)); new_node->x = X; // 插入到当前节点后方 new_node->next = curr->next; curr->next = new_node; // 跳过刚插入的节点,避免重复处理 curr = new_node->next; }else{ // 数值不匹配直接移动到下一个节点 curr = curr->next; } } printf("复制操作执行完成\n"); }
补充注意:你当前main函数中创建头节点后没有初始化
next指针为NULL,会导致空链表判断逻辑出错,建议修改main函数的头节点初始化代码为:Node *list = (Node*)malloc(sizeof(Node)); list->next = NULL; // 新增该行初始化头节点的next指针
内容的提问来源于stack exchange,提问作者Gabriel Schumacher
相关产品推荐
相关产品推荐

