C 语言实现链表删除节点:详细代码解析与优化
void deleteNode(Node** head, int data) {\n if (head == NULL) {\n printf("List is empty.\n");\n return;\n }\n\n Node current = head;\n Node prevNode = NULL;\n\n while (current->data != data) {\n if (current->next == *head) {\n printf("Element %d not found in the list.\n", data);\n return;\n }\n prevNode = current;\n current = current->next;\n }\n\n if (current->next == *head && prevNode == NULL) {\n *head = NULL;\n free(current);\n return;\n }\n\n if (current == *head) {\n prevNode = (*head)->prev;\n *head = (*head)->next;\n prevNode->next = *head;\n (*head)->prev = prevNode;\n free(current);\n } else if (current->next == head) {\n prevNode->next = head;\n (head)->prev = prevNode;\n free(current);\n } else {\n Node temp = current->next;\n prevNode->next = temp;\n temp->prev = prevNode;\n free(current);\n }\n}\n\nvoid traverse(Node head) {\n if (head == NULL) {\n printf("List is empty.\n");\n return;\n }\n\n Node current = head;\n do {\n printf("%d ", current->data);\n current = current->next;\n } while (current != head);\n printf("\n");\n}
原文地址: https://www.cveoy.top/t/topic/pNku 著作权归作者所有。请勿转载和采集!