<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Algorithm on My Little Blog</title><link>https://www.parkerchenca.com/tags/algorithm/</link><description>Recent content in Algorithm on My Little Blog</description><generator>Hugo</generator><language>en-us</language><copyright>Parker Chen</copyright><lastBuildDate>Thu, 10 Sep 2026 11:21:00 +0000</lastBuildDate><atom:link href="https://www.parkerchenca.com/tags/algorithm/index.xml" rel="self" type="application/rss+xml"/><item><title>Simple Tree Traversal</title><link>https://www.parkerchenca.com/tech/simple-tree-traversal/</link><pubDate>Thu, 10 Sep 2026 11:21:00 +0000</pubDate><guid>https://www.parkerchenca.com/tech/simple-tree-traversal/</guid><description>Understanding the &amp;#39;Movement&amp;#39; within the tree</description><content:encoded><![CDATA[<h2 id="-leaf-similar-trees-leetcode-872">🖋️ Leaf-Similar Trees (Leetcode 872)</h2>
<p><img loading="lazy" src="https://assets.leetcode.com/uploads/2020/09/03/leaf-similar-1.jpg"></p>
<p>In short, we are gonna to compare the leaves between two tree.</p>
<p>First, we should get the elements from the leaves.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Definition for a binary tree node.</span>
</span></span><span class="line"><span class="cl"><span class="c1"># class TreeNode:</span>
</span></span><span class="line"><span class="cl"><span class="c1">#     def __init__(self, val=0, left=None, right=None):</span>
</span></span><span class="line"><span class="cl"><span class="c1">#         self.val = val</span>
</span></span><span class="line"><span class="cl"><span class="c1">#         self.left = left</span>
</span></span><span class="line"><span class="cl"><span class="c1">#         self.right = right</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">,</span> <span class="n">list_para</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="n">temp</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">        <span class="n">curr</span> <span class="o">=</span> <span class="n">root</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="k">while</span> <span class="n">curr</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">temp</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">while</span> <span class="n">curr</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="n">temp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">curr</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                <span class="n">curr</span> <span class="o">=</span> <span class="n">curr</span><span class="o">.</span><span class="n">left</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">            <span class="o">//</span> <span class="n">Save</span> <span class="nb">all</span> <span class="n">elements</span> <span class="n">on</span> <span class="n">the</span> <span class="n">left</span> <span class="n">side</span><span class="p">,</span> <span class="n">but</span>
</span></span><span class="line"><span class="cl">            <span class="o">//</span> <span class="n">we</span> <span class="n">only</span> <span class="n">want</span> <span class="n">the</span> <span class="n">leaf</span> <span class="n">element</span><span class="p">,</span> <span class="n">so</span><span class="o">...</span>
</span></span><span class="line"><span class="cl">            <span class="n">curr</span> <span class="o">=</span> <span class="n">temp</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="n">curr</span><span class="o">.</span><span class="n">left</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">curr</span><span class="o">.</span><span class="n">right</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="n">list_para</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">curr</span><span class="o">.</span><span class="n">val</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">            <span class="n">curr</span> <span class="o">=</span> <span class="n">curr</span><span class="o">.</span><span class="n">right</span>
</span></span><span class="line"><span class="cl">            <span class="o">//</span> <span class="n">Attention</span> <span class="n">here</span><span class="p">,</span> <span class="n">we</span> <span class="s1">&#39;move&#39;</span> <span class="n">our</span> <span class="s1">&#39;pointer&#39;</span> <span class="n">to</span> <span class="n">the</span> <span class="n">right</span> <span class="n">side</span>
</span></span><span class="line"><span class="cl">            <span class="o">//</span> <span class="n">After</span> <span class="n">we</span> <span class="n">have</span> <span class="n">done</span> <span class="nb">all</span> <span class="n">the</span> <span class="n">things</span> <span class="n">we</span> <span class="n">should</span> <span class="n">do</span> <span class="n">on</span> <span class="n">the</span> <span class="n">left</span> <span class="n">side</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">leafSimilar</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root1</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">TreeNode</span><span class="p">],</span> <span class="n">root2</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">TreeNode</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">l1</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">        <span class="n">l2</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">        <span class="bp">self</span><span class="o">.</span><span class="n">dfs</span><span class="p">(</span><span class="n">root1</span><span class="p">,</span> <span class="n">l1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="bp">self</span><span class="o">.</span><span class="n">dfs</span><span class="p">(</span><span class="n">root2</span><span class="p">,</span> <span class="n">l2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">l1</span> <span class="o">==</span> <span class="n">l2</span>
</span></span></code></pre></div><h3 id="recursion-method"><strong>Recursion</strong> Method</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">,</span> <span class="n">list_para</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">root</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">return</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">root</span><span class="o">.</span><span class="n">left</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">root</span><span class="o">.</span><span class="n">right</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">list_para</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">val</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="o">//</span> <span class="o">**</span><span class="n">Move</span><span class="o">**</span> <span class="n">to</span> <span class="n">the</span> <span class="n">left</span><span class="p">,</span> <span class="n">do</span> <span class="n">it</span> <span class="n">again</span><span class="p">,</span> <span class="o">**</span><span class="n">until</span> <span class="s1">&#39;root is None&#39;</span><span class="o">**</span>
</span></span><span class="line"><span class="cl">        <span class="bp">self</span><span class="o">.</span><span class="n">dfs</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">list_para</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="o">//</span> <span class="n">Left</span> <span class="n">side</span> <span class="n">finished</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="o">//</span> <span class="o">**</span><span class="n">Move</span><span class="o">**</span> <span class="n">to</span> <span class="n">the</span> <span class="n">right</span><span class="p">,</span> <span class="n">do</span> <span class="n">it</span> <span class="n">again</span><span class="p">,</span> <span class="o">**</span><span class="n">until</span> <span class="s1">&#39;root is None&#39;</span><span class="o">**</span>
</span></span><span class="line"><span class="cl">        <span class="bp">self</span><span class="o">.</span><span class="n">dfs</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="n">list_para</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">				 <span class="o">//</span> <span class="n">Right</span> <span class="n">side</span> <span class="n">finished</span><span class="p">,</span> <span class="nb">all</span> <span class="n">required</span> <span class="n">data</span> <span class="ow">is</span> <span class="n">saved</span> <span class="ow">in</span> <span class="n">the</span> <span class="n">list_para</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">leafSimilar</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root1</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">TreeNode</span><span class="p">],</span> <span class="n">root2</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">TreeNode</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">l1</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">        <span class="n">l2</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">        <span class="bp">self</span><span class="o">.</span><span class="n">dfs</span><span class="p">(</span><span class="n">root1</span><span class="p">,</span> <span class="n">l1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="bp">self</span><span class="o">.</span><span class="n">dfs</span><span class="p">(</span><span class="n">root2</span><span class="p">,</span> <span class="n">l2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">l1</span> <span class="o">==</span> <span class="n">l2</span>
</span></span></code></pre></div>]]></content:encoded></item><item><title>Two Ways to Reverse a Singly Linked List</title><link>https://www.parkerchenca.com/tech/two-ways-to-reverse-a-singly-linked-list/</link><pubDate>Thu, 10 Sep 2026 11:20:00 +0000</pubDate><guid>https://www.parkerchenca.com/tech/two-ways-to-reverse-a-singly-linked-list/</guid><description>&lt;h2 id="0-structure-of-a-singly-linked-list"&gt;0. Structure of a Singly Linked List&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ListNode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;val&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;val&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;next&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="1-move-pointers"&gt;1. Move pointers&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;reverseList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ListNode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;ListNode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;curr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;head&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;curr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;curr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt; &lt;span class="c1"&gt;# Save next node&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;curr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;prev&lt;/span&gt; &lt;span class="c1"&gt;# Reverse the pointer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;curr&lt;/span&gt; &lt;span class="c1"&gt;# Move prev forward&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;curr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="c1"&gt;# Move curr forward&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;prev&lt;/span&gt; &lt;span class="c1"&gt;# New head of the reversed list&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;0:
1 -&amp;gt; None 2 -&amp;gt; 3 -&amp;gt; 4 -&amp;gt; 5 -&amp;gt; NULL&lt;/p&gt;
&lt;p&gt;1:
2 -&amp;gt; 1 -&amp;gt; None 3 -&amp;gt; 4 -&amp;gt; 5 -&amp;gt; NULL&lt;/p&gt;</description><content:encoded><![CDATA[<h2 id="0-structure-of-a-singly-linked-list">0. Structure of a Singly Linked List</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">ListNode</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="nb">next</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="bp">self</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">val</span>
</span></span><span class="line"><span class="cl">        <span class="bp">self</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="nb">next</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">//</span> <span class="mi">1</span> <span class="o">-&gt;</span> <span class="mi">2</span> <span class="o">-&gt;</span> <span class="mi">3</span> <span class="o">-&gt;</span> <span class="mi">4</span> <span class="o">-&gt;</span> <span class="mi">5</span> <span class="o">-&gt;</span> <span class="n">NULL</span>
</span></span></code></pre></div><h2 id="1-move-pointers">1. Move pointers</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">reverseList</span><span class="p">(</span><span class="n">head</span><span class="p">:</span> <span class="n">ListNode</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">ListNode</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">prev</span> <span class="o">=</span> <span class="kc">None</span>
</span></span><span class="line"><span class="cl">    <span class="n">curr</span> <span class="o">=</span> <span class="n">head</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">while</span> <span class="n">curr</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">temp</span> <span class="o">=</span> <span class="n">curr</span><span class="o">.</span><span class="n">next</span>    <span class="c1"># Save next node</span>
</span></span><span class="line"><span class="cl">        <span class="n">curr</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">prev</span>    <span class="c1"># Reverse the pointer</span>
</span></span><span class="line"><span class="cl">        <span class="n">prev</span> <span class="o">=</span> <span class="n">curr</span>         <span class="c1"># Move prev forward</span>
</span></span><span class="line"><span class="cl">        <span class="n">curr</span> <span class="o">=</span> <span class="n">temp</span>         <span class="c1"># Move curr forward</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">prev</span>  <span class="c1"># New head of the reversed list</span>
</span></span></code></pre></div><p>0:
1 -&gt; None  2 -&gt; 3 -&gt; 4 -&gt; 5 -&gt; NULL</p>
<p>1:
2 -&gt; 1 -&gt; None     3 -&gt; 4 -&gt; 5 -&gt; NULL</p>
<p>2:
3 -&gt; 2 -&gt; 1 -&gt; None     4 -&gt; 5 -&gt; NULL</p>
<p>3:
4 -&gt; 3 -&gt; 2 -&gt; 1 -&gt; None     5 -&gt; NULL</p>
<p>4:
5 -&gt; 4 -&gt; 3 -&gt; 2 -&gt; 1 -&gt; None</p>
<hr>
<h2 id="2-head-insertion">2. Head Insertion</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">reverseList</span><span class="p">(</span><span class="n">head</span><span class="p">:</span> <span class="n">ListNode</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">ListNode</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">prev</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">prev</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">head</span>
</span></span><span class="line"><span class="cl">    <span class="n">curr</span> <span class="o">=</span> <span class="n">prev</span><span class="o">.</span><span class="n">next</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">while</span> <span class="n">curr</span><span class="o">.</span><span class="n">next</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">temp</span> <span class="o">=</span> <span class="n">curr</span><span class="o">.</span><span class="n">next</span>
</span></span><span class="line"><span class="cl">        <span class="n">curr</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">temp</span><span class="o">.</span><span class="n">next</span>
</span></span><span class="line"><span class="cl">        <span class="n">temp</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">prev</span><span class="o">.</span><span class="n">next</span>
</span></span><span class="line"><span class="cl">        <span class="n">prev</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">temp</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">prev</span><span class="o">.</span><span class="n">next</span>
</span></span></code></pre></div><p>0:
1 -&gt; 2 -&gt; 3 -&gt; 4 -&gt; 5 -&gt; NULL</p>
<p>1:
<strong>2 -&gt; 1</strong> -&gt; 3 -&gt; 4 -&gt; 5 -&gt; NULL</p>
<p>2:
<strong>3 -&gt; 2 -&gt; 1</strong> -&gt; 4 -&gt; 5 -&gt; NULL</p>
<p>3:
<strong>4 -&gt; 3 -&gt; 2 -&gt; 1</strong> -&gt; 5 -&gt; NULL</p>
<p>4:
<strong>5 -&gt; 4 -&gt; 3 -&gt; 2 -&gt; 1</strong> -&gt; NULL</p>
]]></content:encoded></item><item><title>Leetcode reflection (1)</title><link>https://www.parkerchenca.com/tech/leetcode-reflection-1/</link><pubDate>Thu, 10 Sep 2026 11:17:00 +0000</pubDate><guid>https://www.parkerchenca.com/tech/leetcode-reflection-1/</guid><description>Python APIs</description><content:encoded><![CDATA[<h2 id="1732-find-the-highest-altitude">1732. Find the Highest Altitude</h2>
<p>There is a biker going on a road trip. The road trip consists of <code>n + 1</code> points at different altitudes. The biker starts his trip on point <code>0</code> with altitude equal <code>0</code>.</p>
<p>You are given an integer array <code>gain</code> of length <code>n</code> where <code>gain[i]</code> is the <strong>net gain in altitude</strong> between points <code>i</code> and <code>i + 1</code> for all (<code>0 &lt;= i &lt; n)</code>. Return <em>the <strong>highest altitude</strong> of a point.</em></p>
<p><strong>Example 1:</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Input: gain = [-5,1,5,0,-7]
</span></span><span class="line"><span class="cl">Output: 1
</span></span><span class="line"><span class="cl">Explanation: The altitudes are [0,-5,-4,1,1,-6]. The highest is 1.
</span></span></code></pre></div><p><strong>Example 2:</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Input: gain = [-4,-3,-2,-1,4,3,2]
</span></span><span class="line"><span class="cl">Output: 0
</span></span><span class="line"><span class="cl">Explanation: The altitudes are [0,-4,-7,-9,-10,-6,-3,-1]. The highest is 0.
</span></span></code></pre></div><h3 id="solution">Solution:</h3>
<p>A straightforward question, the major solution is to successively sum 2 Adjacent elements in the list, just like the example.</p>
<p>My first answer is:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">largestAltitude</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gain</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">gain</span><span class="p">)):</span>
</span></span><span class="line"><span class="cl">            <span class="n">gain</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+=</span> <span class="n">gain</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span><span class="mi">1</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">        <span class="n">fixed</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">gain</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">fixed</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">return</span> <span class="n">fixed</span>
</span></span><span class="line"><span class="cl">        <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">return</span> <span class="mi">0</span>
</span></span></code></pre></div><p>Then, I found another one which used the python API:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">largestAltitude</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gain</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="nb">max</span><span class="p">(</span><span class="n">accumulate</span><span class="p">(</span><span class="n">gain</span><span class="p">,</span> <span class="n">initial</span> <span class="o">=</span><span class="mi">0</span><span class="p">))</span>
</span></span></code></pre></div><p><strong>One line, and the space complexity is O(1).</strong></p>
<p>My thought after this question is to use Python APIs (such as <code>accumulate()</code>) as much as I can since it probably has been optimized by someone else. Unless I am not so happy with their performance.</p>
]]></content:encoded></item><item><title>Move Zeroes: Understanding Parameter Behavior in Python</title><link>https://www.parkerchenca.com/tech/move-zeroes-understanding-parameter-behavior-in-python/</link><pubDate>Thu, 10 Sep 2026 11:12:00 +0000</pubDate><guid>https://www.parkerchenca.com/tech/move-zeroes-understanding-parameter-behavior-in-python/</guid><description>Leetcode Problem Notes, Two-pointer Optimization</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude:</strong>
When addressing the &ldquo;Move Zeroes&rdquo; problem, it is simple to misinterpret Python&rsquo;s parameter behavior.
Remember: A local variable and a parameter sharing the same name does not mean they refer to the same object.</p>
</blockquote>
<h2 id="-move-zeroes">🖋️ Move Zeroes</h2>
<p>Given an integer array <code>nums</code>, move all <code>0</code>&rsquo;s to the end of it while maintaining the relative order of the non-zero elements.</p>
<p><strong>Note</strong> that you must do this in-place without making a copy of the array.</p>
<p><strong>Example 1:</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Input: nums = [0,1,0,3,12]
</span></span><span class="line"><span class="cl">Output: [1,3,12,0,0]
</span></span></code></pre></div><hr>
<p>Here&rsquo;s an example of solving the &ldquo;Move Zeroes&rdquo; problem (a wrong one):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">moveZeroes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">counter</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">    <span class="k">while</span> <span class="mi">0</span> <span class="ow">in</span> <span class="n">nums</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">nums</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">counter</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">    <span class="n">nums</span> <span class="o">=</span> <span class="n">nums</span> <span class="o">+</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">counter</span>
</span></span></code></pre></div><p>In this code, the final assignment to <code>nums</code> actually doesn’t affect the parameter <code>nums</code> because <strong>they are different variables</strong>.</p>
<p>Within the function, Python creates a new namespace, known as the <strong>local scope</strong>. All variables defined or assigned inside the function are, by default, considered local variables.</p>
<p>When you execute <code>nums = nums + [0] * counter</code> inside the function, Python’s interpreter assigns the new list object (from the right-hand expression) to the local variable <code>nums</code>. This means:</p>
<ul>
<li>The original <code>nums</code> (the parameter) still refers to the passed-in list object.</li>
<li>The local variable <code>nums</code> now refers to a <strong>new list object</strong>.</li>
<li><strong>The assignment <code>nums = ...</code></strong> changes the binding of the local <code>nums</code> to point to the new object, leaving the original passed-in list unaffected.</li>
</ul>
<p>A possible solution is to change the first <code>nums</code> to <code>nums[:]</code>, which means you are modifying the original object.</p>
<h4 id="two-pointer-solution">Two-pointer Solution:</h4>
<p>A more efficient approach to solving the &ldquo;Move Zeroes&rdquo; problem is using a two-pointer method:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">moveZeroes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">        Do not return anything, modify nums in-place instead.
</span></span></span><span class="line"><span class="cl"><span class="s2">        &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="n">left</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">right</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)):</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="n">nums</span><span class="p">[</span><span class="n">right</span><span class="p">]</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="n">nums</span><span class="p">[</span><span class="n">left</span><span class="p">],</span> <span class="n">nums</span><span class="p">[</span><span class="n">right</span><span class="p">]</span> <span class="o">=</span> <span class="n">nums</span><span class="p">[</span><span class="n">right</span><span class="p">],</span> <span class="n">nums</span><span class="p">[</span><span class="n">left</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">                <span class="n">left</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span></code></pre></div><p>In this solution, <code>left</code> is initialized to zero, and the first element being zero does not affect the algorithm&rsquo;s ability to move all zeros to the right. This two-pointer method efficiently processes the list in-place, making it a more optimal solution than the previous approach.</p>
]]></content:encoded></item></channel></rss>