<p>Given a string s represents the serialization of a nested list, implement a parser to deserialize it and return <em>the deserialized</em> <code>NestedInteger</code>.</p>

<p>Each element is either an integer or a list whose elements may also be integers or other lists.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;324&quot;
<strong>Output:</strong> 324
<strong>Explanation:</strong> You should return a NestedInteger object which contains a single integer 324.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;[123,[456,[789]]]&quot;
<strong>Output:</strong> [123,[456,[789]]]
<strong>Explanation:</strong> Return a NestedInteger object containing a nested list with 2 elements:
1. An integer containing value 123.
2. A nested list containing two elements:
    i.  An integer containing value 456.
    ii. A nested list with one element:
         a. An integer containing value 789
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= s.length &lt;= 5 * 10<sup>4</sup></code></li>
	<li><code>s</code> consists of digits, square brackets <code>&quot;[]&quot;</code>, negative sign <code>&#39;-&#39;</code>, and commas <code>&#39;,&#39;</code>.</li>
	<li><code>s</code> is the serialization of valid <code>NestedInteger</code>.</li>
	<li>All the values in the input are in the range <code>[-10<sup>6</sup>, 10<sup>6</sup>]</code>.</li>
</ul>

class Solution:
    def deserialize(self, s: str) -> NestedInteger:


        def create_integer(pos: int) -> tuple[NestedInteger, int]:

            number_chars: list[str] = []

            while pos < len(s) and (s[pos].isnumeric() or s[pos] == '-'):
                number_chars.append(s[pos])
                pos += 1

            return   NestedInteger(int(''.join(number_chars))), pos - 1
        
        if s[0].isnumeric() or s[0] == '-':
            return create_integer(0)[0]
        

        stack: list[NestedInteger] = []
        pos: int = 1

        outer_nested_integer: NestedInteger = NestedInteger(None)
        stack.append(outer_nested_integer)
        current_nested_integer = outer_nested_integer

        while stack:

            if s[pos].isnumeric() or s[pos] == '-':
                new_nested_integer, pos = create_integer(pos)
                current_nested_integer.add(new_nested_integer)

            elif s[pos] == '[':
                new_nested_integer: NestedInteger = NestedInteger()
                current_nested_integer.add(new_nested_integer)
                stack.append(new_nested_integer)
                current_nested_integer = new_nested_integer
            elif s[pos] == ']':
                stack.pop()
                if stack:
                    current_nested_integer = stack[-1]
            
            pos += 1
        
        return outer_nested_integer


18900