Question on branching objectives in two fundamentally different quest systems

TLDR - How would I introduce branches into a quest system that uses an ID system for objectives?

I am trying to change up my own created quest system. My current system builds quests as linked lists of Objective UObjects. This works fairly well and branches are easily implemented in special BranchObjective UObjects that simply choose a next objective based upon whatever condition the player has satisfied.

I have been told that representing quests as objects instead of as data or types or structs is not good practice.

So, another system I am making represents quests as piles of Objective structs that have an “ID” integer. The numerical value of this int determines the sequence of the quest (ID 2 comes after ID 1, etc).

How could I introduce branches into this quest system that is based upon IDs? Branches in player direction are already in the game so I have to have a way to represent them.

I’ll clear things up if need be.

Main Questions:
Does having a quest built as a linked list of objective object confer any benefit over having the objectives represented as struct types?

Should I keep my current Object based quest system?

What ways can I introduce branch objectives into an ID based quest system?