18 lines
10 KiB
HTML
18 lines
10 KiB
HTML
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="X-UA-Compatible" content="IE=edge"><title> leetcode-206 · MarkDown</title><meta name="description" content="leetcode-206 - Ching"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="short icon" href="/favicon.png"><link rel="stylesheet" href="/css/apollo.css"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,600" type="text/css"><meta name="generator" content="Hexo 6.0.0"><link rel="alternate" href="/atom.xml" title="MarkDown" type="application/atom+xml">
|
||
</head><body><header><a href="/" class="logo-link"><img src="/logo.png"></a><ul class="nav nav-list"><li class="nav-list-item"><a href="/" target="_self" class="nav-list-link">ALL</a></li><li class="nav-list-item"><a href="/categories/leetcode/" target="_self" class="nav-list-link">LEETCODE</a></li><li class="nav-list-item"><a href="/atom.xml" target="_self" class="nav-list-link">RSS</a></li></ul></header><section class="container"><div class="post"><article class="post-block"><h1 class="post-title">leetcode-206</h1><div class="post-meta"><div class="post-time">2020年3月18日</div></div><div class="post-content"><h3 id="206-反转链表"><a href="#206-反转链表" class="headerlink" title="206. 反转链表"></a>206. 反转链表</h3><p><a target="_blank" rel="noopener" href="https://leetcode-cn.com/problems/reverse-linked-list/">题目</a></p>
|
||
<span id="more"></span>
|
||
|
||
<p>最简单的思路是遍历链表一个列表去做存储,通过倒序读取列表的同时改写链表。</p>
|
||
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">ListNode</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">__init__</span>(<span class="params">self, x</span>):</span></span><br><span class="line"> self.val = x</span><br><span class="line"> self.<span class="built_in">next</span> = <span class="literal">None</span></span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Solution</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">reverseList</span>(<span class="params">self, head</span>):</span></span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> head <span class="keyword">or</span> <span class="keyword">not</span> head.<span class="built_in">next</span>:</span><br><span class="line"> <span class="keyword">return</span> head</span><br><span class="line"> nl = []</span><br><span class="line"> <span class="keyword">while</span> head.<span class="built_in">next</span>:</span><br><span class="line"> nl.append(head)</span><br><span class="line"> head = head.<span class="built_in">next</span></span><br><span class="line"> nl.append(head)</span><br><span class="line"> l = <span class="built_in">len</span>(nl)</span><br><span class="line"> <span class="keyword">for</span> x <span class="keyword">in</span> <span class="built_in">range</span>(l):</span><br><span class="line"> <span class="keyword">if</span> x == <span class="number">0</span>:</span><br><span class="line"> nl[x].<span class="built_in">next</span> = <span class="literal">None</span></span><br><span class="line"> <span class="keyword">continue</span></span><br><span class="line"> nl[x].<span class="built_in">next</span> = nl[x-<span class="number">1</span>]</span><br><span class="line"> <span class="keyword">if</span> x == (l - <span class="number">1</span>):</span><br><span class="line"> <span class="keyword">return</span> nl[x]</span><br></pre></td></tr></table></figure>
|
||
|
||
<p>仔细想想自己又傻逼了,何必要遍历两次呢,在第一遍遍历的同时就能操作了:</p>
|
||
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Solution</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">reverseList</span>(<span class="params">self, head</span>):</span></span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> head <span class="keyword">or</span> <span class="keyword">not</span> head.<span class="built_in">next</span>:</span><br><span class="line"> <span class="keyword">return</span> head</span><br><span class="line"> prev_node = <span class="literal">None</span></span><br><span class="line"> next_node = head.<span class="built_in">next</span></span><br><span class="line"> <span class="keyword">while</span> head:</span><br><span class="line"> next_node = head.<span class="built_in">next</span></span><br><span class="line"> head.<span class="built_in">next</span> = prev_node</span><br><span class="line"> prev_node = head</span><br><span class="line"> head = next_node</span><br><span class="line"> <span class="keyword">return</span> prev_node</span><br></pre></td></tr></table></figure>
|
||
|
||
<p>然后是递归的做法,主要思路是一直进到最深一层–也就是链表的最后一个–的时候开始返回,同时修改那一层的两个 node。一开始踩了一个坑是返回了每一个node,结果最后回到第一层的时候得到的是链表的末端,其实只需要修改链表,并不需要返回 node,所以一开始到达链表末端的时候直接返回那一个node就可以了。</p>
|
||
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Solution</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">reverseList</span>(<span class="params">self, head</span>):</span></span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> head:</span><br><span class="line"> <span class="keyword">return</span> head</span><br><span class="line"> <span class="keyword">if</span> head.<span class="built_in">next</span>:</span><br><span class="line"> ss = Solution()</span><br><span class="line"> last = ss.reverseList(head.<span class="built_in">next</span>)</span><br><span class="line"> head.<span class="built_in">next</span>.<span class="built_in">next</span> = head</span><br><span class="line"> head.<span class="built_in">next</span> = <span class="literal">None</span></span><br><span class="line"> <span class="keyword">return</span> last</span><br><span class="line"> <span class="keyword">return</span> head</span><br></pre></td></tr></table></figure>
|
||
|
||
<p>一开始是用list来打草稿,不过想明白递归之后就大同小异了:</p>
|
||
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">a</span>(<span class="params">l:<span class="built_in">list</span></span>)-><span class="built_in">list</span>:</span></span><br><span class="line"> k=[l[<span class="number">0</span>]]</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> l[<span class="number">1</span>:]:</span><br><span class="line"> b=a(l[<span class="number">1</span>:])</span><br><span class="line"> b.extend(k)</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> <span class="keyword">return</span> [l[<span class="number">0</span>]]</span><br><span class="line"> <span class="keyword">return</span> b</span><br></pre></td></tr></table></figure>
|
||
|
||
|
||
</div></article></div></section><footer><div class="paginator"><a href="/2020/03/23/leetcode-169/" class="prev">PRVE</a><a href="/2020/03/17/leetcode-121/" class="next">NEXT</a></div><div class="copyright"><p>© 2016 - 2022 <a href="http://blog.tunpok.com">Ching</a>, unless otherwise noted.</p></div></footer><script src="https://cdn.bootcss.com/mathjax/2.5.3/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script></body></html> |