給出一個列表,將其分成兩個子列表 - 一個用於前半部分,另一個用於後半部分。如果元素的數量是奇數,額外的元素應該放在前面的列表中。因此,名單{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
如何確定「不是最佳運行時」,輸出有什麼問題? –