我在以递归方式从循环单链表中删除单个节点/值时遇到了一些问题(当然,如果可能的话)。我的代码仅从中间删除,而不是从第一个或最后一个位置删除。
在以递归方式删除其中一个后,我无法弄清楚如何建立连接。我的意思是,如果我要删除第一个元素,那么我需要将最后一个节点连接到下一个节点。
这是我的代码:
Node *ListDelete(Node *list, Node *tail, int val, Node **deleted) {
if (!list || (list == tail && list->value != val)) {
*deleted = NULL;
return list;
}
if (list->value == val) {
*deleted = list;
return list->next;
}
list->next = ListDelete(list->next, tail, val, deleted);
return list;
}
参数和返回:
case MENU_DELETE:
val = GetValue("Enter value");
if (list) tail = FindTail(list);
list = ListDelete(list, tail, val, &node);
ListPrintNode(node, "Deleted");
free(node);
查找尾函数:
Node* FindTail(Node* list)
{
Node* temp = list;
while(temp->next != list)
temp = temp->next;
return temp;
}