This solution is generated by ChatGPT, correctness is not guaranteed.

AI solution for JavaScript Coding Question on BFE.dev
158. Previous Left Sibling

One possible solution is to start from the target element and use the previousSibling property to traverse the DOM tree towards the left until finding a non-empty, non-text node. Here's the code:

function previousLeftSibling(target) {
  let node = target.previousSibling;
  while (node && node.nodeType !== Node.ELEMENT_NODE) {
    node = node.previousSibling;
  }
  return node || null;
}

This function takes a DOM element as input and returns the previous left sibling element, or null if there isn't one. It uses a while loop to iterate over the siblings until finding the first non-empty, non-text element node. If the loop reaches the beginning of the sibling list (i.e., node is falsy), the function returns null.

The time complexity of this solution is O(n), where n is the number of siblings of the target element. The worst-case scenario is when the target element is the last child of its parent, in which case we have to traverse all its siblings before finding the previous left sibling (or reaching the beginning of the list). The space complexity is O(1), as we only use a constant amount of extra memory to store the current node reference during the traversal.