1
0
mirror of synced 2025-12-13 17:58:29 +08:00
Files
awesome-interview/book2/algorithm-reverse-linked-list.html

21 lines
31 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html class="docs-version-current" lang="en" dir="ltr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="Docusaurus v2.0.0-beta.9">
<link rel="search" type="application/opensearchdescription+xml" title="HZFE - 剑指前端 Offer" href="/awesome-interview/opensearch.xml">
<link rel="preconnect" href="https://hm.baidu.com">
<script>var _hmt=_hmt||[];!function(){var e=document.createElement("script");e.src="https://hm.baidu.com/hm.js?c7cd0fd77ac518cc6ef46461cdc9524b";var c=document.getElementsByTagName("script")[0];c.parentNode.insertBefore(e,c)}()</script>
<script src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js" async data-ad-client="ca-pub-9889934432771967"></script>
<script src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9889934432771967" async crossorigin="anonymous"></script><title data-react-helmet="true">反转链表 | HZFE - 剑指前端 Offer</title><meta data-react-helmet="true" name="twitter:card" content="summary_large_image"><meta data-react-helmet="true" property="og:url" content="https://febook.hzfe.org/awesome-interview/book2/algorithm-reverse-linked-list"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="current"><meta data-react-helmet="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-react-helmet="true" property="og:title" content="反转链表 | HZFE - 剑指前端 Offer"><meta data-react-helmet="true" name="description" content="题目描述"><meta data-react-helmet="true" property="og:description" content="题目描述"><link data-react-helmet="true" rel="shortcut icon" href="/awesome-interview/img/favicon.ico"><link data-react-helmet="true" rel="canonical" href="https://febook.hzfe.org/awesome-interview/book2/algorithm-reverse-linked-list"><link data-react-helmet="true" rel="alternate" href="https://febook.hzfe.org/awesome-interview/book2/algorithm-reverse-linked-list" hreflang="en"><link data-react-helmet="true" rel="alternate" href="https://febook.hzfe.org/awesome-interview/book2/algorithm-reverse-linked-list" hreflang="x-default"><link data-react-helmet="true" rel="preconnect" href="https://BH4D9OD16A-dsn.algolia.net" crossorigin="anonymous"><link rel="stylesheet" href="/awesome-interview/assets/css/styles.e4b9d1c0.css">
<link rel="preload" href="/awesome-interview/assets/js/runtime~main.d91be9a7.js" as="script">
<link rel="preload" href="/awesome-interview/assets/js/main.142a0a20.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_Hokv">Skip to main content</a></div><nav class="navbar navbar--fixed-top navbarHideable_rg25"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/awesome-interview/"><div class="navbar__logo"><img src="/awesome-interview/img/badge.svg" alt="HZFE" class="themedImage_oFxA themedImage--light_MnMn"><img src="/awesome-interview/img/badge.svg" alt="HZFE" class="themedImage_oFxA themedImage--dark_Eu58"></div><b class="navbar__title">剑指前端 Offer</b></a></div><div class="navbar__items navbar__items--right"><a href="https://github.com/hzfe/awesome-interview" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link"><span>GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_0my0"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></span></a><div class="searchBox_MFdg"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div class="main-wrapper docs-wrapper docs-doc-page"><div class="docPage_0hEs"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_QV-2" type="button"></button><aside class="docSidebarContainer_Ss+s"><div class="sidebar_sdvj sidebarWithHideableNavbar_OjaZ"><a tabindex="-1" class="sidebarLogo_HFi+" href="/awesome-interview/"><img src="/awesome-interview/img/badge.svg" alt="HZFE" class="themedImage_oFxA themedImage--light_MnMn"><img src="/awesome-interview/img/badge.svg" alt="HZFE" class="themedImage_oFxA themedImage--dark_Eu58"><b>剑指前端 Offer</b></a><nav class="menu thin-scrollbar menu_ICf+"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/awesome-interview/about">关于我们</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/awesome-interview/">前言</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#">模拟题一</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><a class="menu__link menu__link--sublist menu__link--active" href="#">模拟题二</a><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book2/browser-render-mechanism">浏览器:浏览器渲染机制</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book2/browser-garbage">浏览器:垃圾回收机制</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book2/engineer-babel">工程化Babel 的原理</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book2/frame-react-fiber">框架React Fiber 的作用和原理</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book2/frame-react-hoc-hooks">框架HOC vs Render Props vs Hooks</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book2/js-inherite">基础ES5、ES6 如何实现继承</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book2/js-new">基础New 操作符的原理</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book2/css-preprocessor">样式:谈谈 CSS 预处理器</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book2/network-http-cache">网络HTTP 缓存机制</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book2/coding-throttle-debounce">编码:实现节流去抖函数</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/awesome-interview/book2/algorithm-reverse-linked-list">算法:反转链表</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book2/topic-multi-pics-site-optimize">综合:多图站点性能优化</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#">模拟题三</a></li></ul></nav><button type="button" title="Collapse sidebar" aria-label="Collapse sidebar" class="button button--secondary button--outline collapseSidebarButton_yhNW"><svg width="20" height="20" aria-hidden="true" class="collapseSidebarButtonIcon_5wwD"><g fill="#7a7a7a"><path d="M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"></path><path d="M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"></path></g></svg></button></div></aside><main class="docMainContainer_53AJ"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_nd30"><div class="docItemContainer_areA"><article><div class="tocCollapsible_PMZS theme-doc-toc-mobile tocMobile_uchT"><button type="button" class="clean-btn tocCollapsibleButton_R4jy">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>反转链表</h1></header><h2 class="anchor anchorWithHideOnScrollNavbar_Ar9W" id="题目描述">题目描述<a aria-hidden="true" class="hash-link" href="#题目描述" title="Direct link to heading"></a></h2><p>定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。</p><p><img src="https://user-images.githubusercontent.com/15681693/137571934-63ebc223-0a1f-4cf5-8217-1a4644aff2e3.png" alt="反转链表"></p><p>示例:</p><div class="codeBlockContainer_SpBh"><div class="codeBlockContent_cNW-"><pre tabindex="0" class="prism-code language-undefined codeBlock_Da5m thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_oOkg"><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">输入: 1-&gt;2-&gt;3-&gt;4-&gt;5-&gt;NULL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">输出: 5-&gt;4-&gt;3-&gt;2-&gt;1-&gt;NULL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_UR8u clean-btn">Copy</button></div></div><h2 class="anchor anchorWithHideOnScrollNavbar_Ar9W" id="解法一迭代双指针">解法一:迭代(双指针)<a aria-hidden="true" class="hash-link" href="#解法一迭代双指针" title="Direct link to heading"></a></h2><p><a href="https://codesandbox.io/s/hzfe-suanfa-omcjw?file=/index.html" target="_blank" rel="noopener noreferrer">在线链接</a></p><p>本方法是对链表进行遍历,然后在访问各节点时修改 next 的指向,达到反转链表的目的。</p><ol><li>初始化 cur 和 pre 两个节点,分别指向 head 和 null。</li><li>对链表进行循环,声明 temp 节点用来保存当前节点的下一个节点。</li><li>修改当前节点 cur 的 next 指针指向为 pre 节点。</li><li>pre 节点修改为 cur 节点。</li><li>cur 节点修改为 temp 节点。</li><li>继续进行处理,直到 cur 节点为 null返回 pre 节点。</li></ol><div class="codeBlockContainer_SpBh"><div class="codeBlockContent_cNW- javascript"><pre tabindex="0" class="prism-code language-javascript codeBlock_Da5m thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_oOkg"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">/**</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> * Definition for singly-linked list.</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> * function ListNode(val) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> * this.val = val;</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> * this.next = null;</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> * }</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> */</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">/**</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> * @param {ListNode} head</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> * @return {ListNode}</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> */</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">reverseList</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">head</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> cur </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> head</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// 正向链表的头指针</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> pre </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword null nil" style="color:#00009f">null</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// 反向链表的头指针</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">while</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">cur</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> temp </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> cur</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">next</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// 暂存当前节点的后续节点,用于更新正向链表</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> cur</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">next</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> pre</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// 将当前节点指向反向链表,这是一个建立反向链接的过程</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> pre </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> cur</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// 更新反向链表的头指针为当前已处理的节点,反向链表的该轮构建完成</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> cur </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> temp</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// 将正向链表头指针替换为暂存的节点,正向链表处理完成,开始下一轮处理</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> pre</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_UR8u clean-btn">Copy</button></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_Ar9W" id="复杂度分析">复杂度分析<a aria-hidden="true" class="hash-link" href="#复杂度分析" title="Direct link to heading"></a></h3><ul><li>时间复杂度 O(N):遍历链表使用线性大小时间。</li><li>空间复杂度 O(1):变量 pre 和 cur 使用常数大小额外空间。</li></ul><h2 class="anchor anchorWithHideOnScrollNavbar_Ar9W" id="解法二递归">解法二:递归<a aria-hidden="true" class="hash-link" href="#解法二递归" title="Direct link to heading"></a></h2><p><a href="https://codesandbox.io/s/hzfe-suan-fa-fan-zhuan-lian-biao-di-gui-fa-forked-my3i4" target="_blank" rel="noopener noreferrer">在线链接</a></p><p>当使用递归对链表进行处理时,从链表的第一个节点出发,然后找到最后一个节点,该节点就是反转链表的头结点,然后进行回溯处理。</p><ol><li>初始链表的头结点head 标识。</li><li>如果 head 为空或者 head.next 为空,返回 head。</li><li>定义 reverseHead 节点,保存反转的链表值。</li><li>每次让 head 下一个节点的 next 指向 head形成反转。</li><li>递归处理到最后一个节点,返回 reverseHead。</li></ol><div class="codeBlockContainer_SpBh"><div class="codeBlockContent_cNW- javascript"><pre tabindex="0" class="prism-code language-javascript codeBlock_Da5m thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_oOkg"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">/**</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> * Definition for singly-linked list.</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> * function ListNode(val) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> * this.val = val;</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> * this.next = null;</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> * }</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> */</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">/**</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> * @param {ListNode} head</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> * @return {ListNode}</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> */</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">reverseList</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">head</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// 判断当前节点是否还需要处理</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">head </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token keyword null nil" style="color:#00009f">null</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">||</span><span class="token plain"> head</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">next</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token keyword null nil" style="color:#00009f">null</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> head</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// 递归处理后续节点</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> reverseHead </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">reverseList</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">head</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">next</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// 局部反转节点</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> head</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">next</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">next</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> head</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> head</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">next</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword null nil" style="color:#00009f">null</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> reverseHead</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_UR8u clean-btn">Copy</button></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_Ar9W" id="复杂度分析-1">复杂度分析:<a aria-hidden="true" class="hash-link" href="#复杂度分析-1" title="Direct link to heading"></a></h3><ul><li>时间复杂度 O(N)n 是链表的长度,需要对链表的每个节点进行反转操作。</li><li>空间复杂度 O(N)n 是链表的长度,空间复杂度主要取决于递归调用的栈空间,最多为 n 层。</li></ul><h2 class="anchor anchorWithHideOnScrollNavbar_Ar9W" id="参考资料">参考资料<a aria-hidden="true" class="hash-link" href="#参考资料" title="Direct link to heading"></a></h2><ol><li><a href="https://book.douban.com/subject/6966465/" target="_blank" rel="noopener noreferrer">剑指 offer</a></li></ol></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><div class="pagination-nav__item"><a class="pagination-nav__link" href="/awesome-interview/book2/coding-throttle-debounce"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">« <!-- -->编码:实现节流去抖函数</div></a></div><div class="pagination-nav__item pagination-nav__item--next"><a class="pagination-nav__link" href="/awesome-interview/book2/topic-multi-pics-site-optimize"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">综合:多图站点性能优化<!-- --> »</div></a></div></nav></div></div><div class="col col--3"><div class="tableOfContents_N4oB thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#题目描述" class="table-of-contents__link toc-highlight">题目描述</a></li><li><a href="#解法一迭代双指针" class="table-of-contents__link toc-highlight">解法一:迭代(双指针)</a><ul><li><a href="#复杂度分析" class="table-of-contents__link toc-highlight">复杂度分析</a></li></ul></li><li><a href="#解法二递归" class="table-of-contents__link toc-highlight">解法二:递归</a><ul><li><a href="#复杂度分析-1" class="table-of-contents__link toc-highlight">复杂度分析:</a></li></ul></li><li><a href="#参考资料" class="table-of-contents__link toc-highlight">参考资料</a></li></ul></div></div></div><div class="row"><div class="col"><div class="react-utterences"><div>Loading script...</div></div></div><div class="col col--3"></div></div></div></main></div></div></div>
<script src="/awesome-interview/assets/js/runtime~main.d91be9a7.js"></script>
<script src="/awesome-interview/assets/js/main.142a0a20.js"></script>
</body>
</html>