|
楼主 |
发表于 2023-12-28 09:46:56
|
显示全部楼层
在上面的代码基础上,我们可以添加修改和删除节点的功能。下面是修改和删除节点的代码示例:
- // 修改指定位置节点的数据
- void modifyNode(struct Node* head, int position, int newData) {
- struct Node* temp = head;
- int count = 0;
- while (temp != NULL && count < position) {
- temp = temp->next;
- count++;
- }
- if (temp != NULL) {
- temp->data = newData;
- printf("节点 %d 的数据已修改为 %d\n", position, newData);
- } else {
- printf("位置 %d 无效\n", position);
- }
- }
- // 删除指定位置的节点
- void deleteNode(struct Node** head, int position) {
- if (*head == NULL) {
- printf("链表为空,无法删除节点\n");
- return;
- }
- struct Node* temp = *head;
- if (position == 0) {
- *head = temp->next;
- free(temp);
- printf("节点 %d 已被删除\n", position);
- return;
- }
- int count = 0;
- while (temp != NULL && count < position - 1) {
- temp = temp->next;
- count++;
- }
- if (temp == NULL || temp->next == NULL) {
- printf("位置 %d 无效\n", position);
- return;
- }
- struct Node* nextNode = temp->next->next;
- free(temp->next);
- temp->next = nextNode;
- printf("节点 %d 已被删除\n", position);
- }
复制代码
在上述代码中,我们添加了两个新的函数。 modifyNode 函数用于修改指定位置节点的数据,它接受链表头节点和目标位置作为参数,并在找到目标位置后修改节点的数据。如果目标位置无效,则会输出相应的错误信息。
deleteNode 函数用于删除指定位置的节点,它接受链表头节点和目标位置作为参数。如果链表为空,则会输出错误信息。如果目标位置为0,则直接删除头节点。否则,我们遍历链表找到目标位置的前一个节点,然后修改其 next 指针,跳过目标位置的节点,并释放内存。如果目标位置无效,则会输出相应的错误信息。
你可以在主函数中调用这两个新函数来测试修改和删除节点的功能。
请注意,这只是一个简单的示例,你可以根据需要扩展和修改代码来实现更复杂的链表操作。 |
|