<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 NestedInteger:
    def __init__(self, value=None):
        if value is None:
            self._list = []
            self._integer = None
        else:
            self._list = None
            self._integer = value

    def isInteger(self):
        return self._integer is not None

    def add(self, elem):
        if self._list is not None:
            self._list.append(elem)

    def setInteger(self, value):
        self._integer = value
        self._list = None

    def getInteger(self):
        return self._integer

    def getList(self):
        return self._list

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

        if s[0] != '[':  # If the string does not start with '[', it's a single integer.
            return NestedInteger(int(s))

        stack = []
        num = None
        negative = False

        for i, char in enumerate(s):
            if char == '-':
                negative = True
            elif char.isdigit():
                if num is None:
                    num = 0
                num = num * 10 + int(char)
            elif char == '[':
                stack.append(NestedInteger())
            elif char in ',]':
                if num is not None:
                    if negative:
                        num = -num
                    stack[-1].add(NestedInteger(num))
                num = None
                negative = False

                if char == ']' and len(stack) > 1:
                    ni = stack.pop()
                    stack[-1].add(ni)

        return stack[0]

# Example usage:
solution = Solution()
print(solution.deserialize("324").getInteger())  # Output: 324
nested_list = solution.deserialize("[123,[456,[789]]]")
print(nested_list.getList())  # Output: [123,[456,[789]]]
18400