给出一个列表,将其分成两个子列表 - 一个用于前半部分,另一个用于后半部分。如果元素的数量是奇数,额外的元素应该放在前面的列表中。因此,名单{2, 3, 5, 7, 11}
上的FrontBackSplit()
应该产生两个列表{2, 3, 5}
和{7, 11}
。将Linklist分为两部分
代码是这样的。
void FrontBackSplit(Node *head, Node **front, Node **back) {
if (!head) return; // Handle empty list
Node *front_last_node;
Node *slow = head;
Node *fast = head;
while (fast) {
front_last_node = slow;
slow = slow->next;
fast = (fast->next) ? fast->next->next : NULL;
}
front_last_node->next = NULL; // ends the front sublist
*front = head;
*back = slow;
}
问题是我没有获得最佳的运行时间和有时预期的输出。
你有清单准备好了吗?如果是的话,除以2,由许多节点推进并分割。 – Vesper
有什么问题?当你调用函数时会发生什么? – nouney
如何确定“不是最佳运行时”,输出有什么问题? –