建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串,根据输入的字符串,先找到相应的结点,后删除之。
1条回答 默认 最新
关注【以下回答由 GPT 生成】
#include <stdio.h> #include <stdlib.h> #include <string.h> // 定义链表节点 struct Node { char data[50]; struct Node* next; }; // 初始化链表 struct Node* initLinkedList() { return NULL; } // 在链表尾部插入节点 void insertNode(struct Node** head, char* data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); strcpy(newNode->data, data); newNode->next = NULL; if (*head == NULL) { *head = newNode; } else { struct Node* current = *head; while (current->next != NULL) { current = current->next; } current->next = newNode; } } // 从链表中删除指定的字符串 void deleteNode(struct Node** head, char* data) { struct Node* temp, *prev; temp = *head; if (temp != NULL && strcmp(temp->data, data) == 0) { *head = temp->next; free(temp); return; } while (temp != NULL && strcmp(temp->data, data) != 0) { prev = temp; temp = temp->next; } if (temp == NULL) { printf("String not found in the list\n"); return; } prev->next = temp->next; free(temp); } // 打印链表 void printLinkedList(struct Node* head) { struct Node* current = head; while (current != NULL) { printf("%s -> ", current->data); current = current->next; } printf("NULL\n"); } int main() { struct Node* head = initLinkedList(); insertNode(&head, "hello"); insertNode(&head, "world"); insertNode(&head, "hello"); insertNode(&head, "apple"); printf("Original List: \n"); printLinkedList(head); deleteNode(&head, "hello"); printf("After deleting 'hello' from the list: \n"); printLinkedList(head); return 0; }希望这个代码示例能够帮到您,如果有任何问题,请随时问我。
【相关推荐】
- 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7496193
- 你也可以参考下这篇文章:C语言 定义一个单向链表,依次从键盘输入10个整数,通过动态内存分配建立链表的节点,将节点按保存整数值从小到大的顺序插入到单链表中,最后输出这个单链表
- 您还可以看一下 尹成老师的C语言系列之 字符串相关算法课程中的 寻找字符串最长数字串小节, 巩固相关知识点
- 除此之外, 这篇博客: 用c语言实现整型变量内容互换中的 对于给定的两个整形变量的值,将两个值的内容进行交换的问题,从两个方面设计解决方案,下面为具体的算法分析及程序。 部分也许能够解决你的问题。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报