forked from ligecarryme/algorithm-pattern-JavaScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathanki_linkedlist.txt
More file actions
16 lines (16 loc) · 46.5 KB
/
anki_linkedlist.txt
File metadata and controls
16 lines (16 loc) · 46.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div style='background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); padding:20px; border-radius:12px; color:white;'><h2 style='margin:0 0 15px 0; font-size:20px;'>🔗 206. 反转链表</h2><p style='margin:10px 0;'><span style='background:#E8F5E9; color:#4CAF50; padding:4px 12px; border-radius:12px; font-weight:bold; font-size:12px;'>Easy</span> <span style='background:rgba(255,255,255,0.2); padding:4px 12px; border-radius:12px; font-size:12px;'>必背</span></p><div style='background:rgba(255,255,255,0.15); padding:15px; border-radius:8px; margin:15px 0; font-size:14px; line-height:1.6;'>给你单链表的头节点 `head` ,请你反转链表,并返回反转后的链表。</div><p style='margin:15px 0 0 0;'><a href='https://leetcode-cn.com/problems/reverse-linked-list/' style='color:#fff; text-decoration:underline;'>📎 LeetCode 链接</a></p></div> <div style='padding:15px; background:#f5f5f5; border-radius:12px;'><h3 style='color:#333; margin:0 0 15px 0; border-bottom:2px solid #667eea; padding-bottom:10px;'>💡 解题代码</h3><div style='background:#1e1e1e; color:#d4d4d4; padding:15px; border-radius:8px; font-family:Consolas,Monaco,"Courier New",monospace; font-size:13px; line-height:1.5; overflow-x:auto; text-align:left; white-space:pre-wrap; border:1px solid #333;'><code style='font-family:inherit;'>```javascript<br><span style="color:#C586C0;">var</span> reverseList = <span style="color:#C586C0;">function</span>(head) {<br> <span style="color:#C586C0;">let</span> prev = <span style="color:#C586C0;">null</span>;<br> <span style="color:#C586C0;">let</span> cur = head;<br> <span style="color:#C586C0;">while</span> (cur !== <span style="color:#C586C0;">null</span>) {<br> <span style="color:#C586C0;">let</span> next = cur.next;<br> cur.next = prev;<br> prev = cur;<br> cur = next;<br> }<br> <span style="color:#C586C0;">return</span> prev;<br>};<br>```</code></div></div>
<div style='background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); padding:20px; border-radius:12px; color:white;'><h2 style='margin:0 0 15px 0; font-size:20px;'>🔗 92. 反转链表 II</h2><p style='margin:10px 0;'><span style='background:#FFF3E0; color:#FF9800; padding:4px 12px; border-radius:12px; font-weight:bold; font-size:12px;'>Medium</span> <span style='background:rgba(255,255,255,0.2); padding:4px 12px; border-radius:12px; font-size:12px;'>区间反转</span></p><div style='background:rgba(255,255,255,0.15); padding:15px; border-radius:8px; margin:15px 0; font-size:14px; line-height:1.6;'>给你单链表的头节点 `head` 和两个整数 `left` 和 `right` ,请你反转从位置 `left` 到位置 `right` 的链表节点,返回反转后的链表。</div><p style='margin:15px 0 0 0;'><a href='https://leetcode-cn.com/problems/reverse-linked-list-ii/' style='color:#fff; text-decoration:underline;'>📎 LeetCode 链接</a></p></div> <div style='padding:15px; background:#f5f5f5; border-radius:12px;'><h3 style='color:#333; margin:0 0 15px 0; border-bottom:2px solid #667eea; padding-bottom:10px;'>💡 解题代码</h3><div style='background:#1e1e1e; color:#d4d4d4; padding:15px; border-radius:8px; font-family:Consolas,Monaco,"Courier New",monospace; font-size:13px; line-height:1.5; overflow-x:auto; text-align:left; white-space:pre-wrap; border:1px solid #333;'><code style='font-family:inherit;'>```javascript<br><span style="color:#C586C0;">var</span> reverseBetween = <span style="color:#C586C0;">function</span>(head, m, n) {<br> <span style="color:#C586C0;">let</span> dummy = <span style="color:#C586C0;">new</span> <span style="color:#DCDCAA;">ListNode</span>(-<span style="color:#B5CEA8;">1</span>);<br> dummy.next = head;<br> <span style="color:#C586C0;">let</span> pre = dummy;<br> <span style="color:#C586C0;">for</span> (<span style="color:#C586C0;">let</span> i = <span style="color:#B5CEA8;">1</span>; i < m; i++) {<br> pre = pre.next;<br> }<br> <span style="color:#C586C0;">let</span> cur = pre.next;<br> <span style="color:#C586C0;">for</span> (<span style="color:#C586C0;">let</span> i = <span style="color:#B5CEA8;">0</span>; i < n - m; i++) {<br> <span style="color:#C586C0;">let</span> next = cur.next;<br> cur.next = next.next;<br> next.next = pre.next;<br> pre.next = next;<br> }<br> <span style="color:#C586C0;">return</span> dummy.next;<br>};<br>```</code></div></div>
<div style='background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); padding:20px; border-radius:12px; color:white;'><h2 style='margin:0 0 15px 0; font-size:20px;'>🔗 25. K 个一组翻转链表</h2><p style='margin:10px 0;'><span style='background:#FFEBEE; color:#f44336; padding:4px 12px; border-radius:12px; font-weight:bold; font-size:12px;'>Hard</span> <span style='background:rgba(255,255,255,0.2); padding:4px 12px; border-radius:12px; font-size:12px;'>面试常客</span></p><div style='background:rgba(255,255,255,0.15); padding:15px; border-radius:8px; margin:15px 0; font-size:14px; line-height:1.6;'>给你一个链表,每 `k` 个节点一组进行翻转,请你返回翻转后的链表。</div><p style='margin:15px 0 0 0;'><a href='https://leetcode-cn.com/problems/reverse-nodes-in-k-group/' style='color:#fff; text-decoration:underline;'>📎 LeetCode 链接</a></p></div> <div style='padding:15px; background:#f5f5f5; border-radius:12px;'><h3 style='color:#333; margin:0 0 15px 0; border-bottom:2px solid #667eea; padding-bottom:10px;'>💡 解题代码</h3><div style='background:#1e1e1e; color:#d4d4d4; padding:15px; border-radius:8px; font-family:Consolas,Monaco,"Courier New",monospace; font-size:13px; line-height:1.5; overflow-x:auto; text-align:left; white-space:pre-wrap; border:1px solid #333;'><code style='font-family:inherit;'>```javascript<br><span style="color:#C586C0;">var</span> reverseKGroup = <span style="color:#C586C0;">function</span>(head, k) {<br> <span style="color:#C586C0;">let</span> cur = head;<br> <span style="color:#C586C0;">let</span> count = <span style="color:#B5CEA8;">0</span>;<br> <span style="color:#6A9955;">// 探测是否够 k 个<br></span><br> <span style="color:#C586C0;">while</span> (cur !== <span style="color:#C586C0;">null</span> && count !== k) {<br> cur = cur.next;<br> count++;<br> }<br> <span style="color:#C586C0;">if</span> (count === k) {<br> <span style="color:#6A9955;">// 反转这 k 个节点<br></span><br> <span style="color:#C586C0;">let</span> prev = <span style="color:#C586C0;">null</span>;<br> <span style="color:#C586C0;">let</span> node = head;<br> <span style="color:#C586C0;">for</span> (<span style="color:#C586C0;">let</span> i = <span style="color:#B5CEA8;">0</span>; i < k; i++) {<br> <span style="color:#C586C0;">let</span> next = node.next;<br> node.next = prev;<br> prev = node;<br> node = next;<br> }<br> <span style="color:#6A9955;">// 递归连接<br></span><br> head.next = <span style="color:#DCDCAA;">reverseKGroup</span>(cur, k);<br> <span style="color:#C586C0;">return</span> prev;<br> }<br> <span style="color:#C586C0;">return</span> head;<br>};<br>```</code></div></div>
<div style='background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); padding:20px; border-radius:12px; color:white;'><h2 style='margin:0 0 15px 0; font-size:20px;'>🔗 21. 合并两个有序链表</h2><p style='margin:10px 0;'><span style='background:#E8F5E9; color:#4CAF50; padding:4px 12px; border-radius:12px; font-weight:bold; font-size:12px;'>Easy</span></p><div style='background:rgba(255,255,255,0.15); padding:15px; border-radius:8px; margin:15px 0; font-size:14px; line-height:1.6;'>将两个升序链表合并为一个新的升序链表并返回。</div><p style='margin:15px 0 0 0;'><a href='https://leetcode-cn.com/problems/merge-two-sorted-lists/' style='color:#fff; text-decoration:underline;'>📎 LeetCode 链接</a></p></div> <div style='padding:15px; background:#f5f5f5; border-radius:12px;'><h3 style='color:#333; margin:0 0 15px 0; border-bottom:2px solid #667eea; padding-bottom:10px;'>💡 解题代码</h3><p style='color:#667eea; font-weight:bold; margin:15px 0 10px 0;'>📝 解法 1</p><div style='background:#1e1e1e; color:#d4d4d4; padding:15px; border-radius:8px; font-family:Consolas,Monaco,"Courier New",monospace; font-size:13px; line-height:1.5; overflow-x:auto; text-align:left; white-space:pre-wrap; border:1px solid #333;'><code style='font-family:inherit;'>```javascript<br><span style="color:#6A9955;">// 迭代法<br></span><br><span style="color:#C586C0;">var</span> mergeTwoLists = <span style="color:#C586C0;">function</span>(l1, l2) {<br> <span style="color:#C586C0;">let</span> dummy = <span style="color:#C586C0;">new</span> <span style="color:#DCDCAA;">ListNode</span>(-<span style="color:#B5CEA8;">1</span>);<br> <span style="color:#C586C0;">let</span> pre = dummy;<br> <span style="color:#C586C0;">while</span> (l1 !== <span style="color:#C586C0;">null</span> && l2 !== <span style="color:#C586C0;">null</span>) {<br> <span style="color:#C586C0;">if</span> (l1.val <= l2.val) {<br> pre.next = l1;<br> l1 = l1.next;<br> } <span style="color:#C586C0;">else</span> {<br> pre.next = l2;<br> l2 = l2.next;<br> }<br> pre = pre.next;<br> }<br> pre.next = l1 === <span style="color:#C586C0;">null</span> ? l2 : l1;<br> <span style="color:#C586C0;">return</span> dummy.next;<br>};<br>```</code></div><hr style='border:none; border-top:1px dashed #ccc; margin:20px 0;'><p style='color:#667eea; font-weight:bold; margin:15px 0 10px 0;'>📝 解法 2</p><div style='background:#1e1e1e; color:#d4d4d4; padding:15px; border-radius:8px; font-family:Consolas,Monaco,"Courier New",monospace; font-size:13px; line-height:1.5; overflow-x:auto; text-align:left; white-space:pre-wrap; border:1px solid #333;'><code style='font-family:inherit;'>```javascript<br><span style="color:#6A9955;">//递归<br></span><br><span style="color:#C586C0;">var</span> mergeTwoLists = <span style="color:#C586C0;">function</span>(l1, l2) {<br> <span style="color:#C586C0;">if</span>(l1 === <span style="color:#C586C0;">null</span>){<br> <span style="color:#C586C0;">return</span> l2;<br> }<span style="color:#C586C0;">else</span> <span style="color:#C586C0;">if</span>(l2 === <span style="color:#C586C0;">null</span>){<br> <span style="color:#C586C0;">return</span> l1;<br> }<span style="color:#C586C0;">else</span> <span style="color:#C586C0;">if</span>(l1.val <= l2.val){<br> l1.next = <span style="color:#DCDCAA;">mergeTwoLists</span>(l1.next,l2);<br> <span style="color:#C586C0;">return</span> l1;<br> }<span style="color:#C586C0;">else</span>{<br> l2.next = <span style="color:#DCDCAA;">mergeTwoLists</span>(l1,l2.next);<br> <span style="color:#C586C0;">return</span> l2;<br> }<br>};<br>```</code></div></div>
<div style='background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); padding:20px; border-radius:12px; color:white;'><h2 style='margin:0 0 15px 0; font-size:20px;'>🔗 23. 合并K个排序链表</h2><p style='margin:10px 0;'><span style='background:#FFEBEE; color:#f44336; padding:4px 12px; border-radius:12px; font-weight:bold; font-size:12px;'>Hard</span> <span style='background:rgba(255,255,255,0.2); padding:4px 12px; border-radius:12px; font-size:12px;'>堆/归并</span></p><div style='background:rgba(255,255,255,0.15); padding:15px; border-radius:8px; margin:15px 0; font-size:14px; line-height:1.6;'>给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中。</div><p style='margin:15px 0 0 0;'><a href='https://leetcode-cn.com/problems/merge-k-sorted-lists/' style='color:#fff; text-decoration:underline;'>📎 LeetCode 链接</a></p></div> <div style='padding:15px; background:#f5f5f5; border-radius:12px;'><h3 style='color:#333; margin:0 0 15px 0; border-bottom:2px solid #667eea; padding-bottom:10px;'>💡 解题代码</h3><p style='color:#667eea; font-weight:bold; margin:15px 0 10px 0;'>📝 解法 1</p><div style='background:#1e1e1e; color:#d4d4d4; padding:15px; border-radius:8px; font-family:Consolas,Monaco,"Courier New",monospace; font-size:13px; line-height:1.5; overflow-x:auto; text-align:left; white-space:pre-wrap; border:1px solid #333;'><code style='font-family:inherit;'>```javascript<br><span style="color:#C586C0;">var</span> mergeKLists = <span style="color:#C586C0;">function</span>(lists) {<br> <span style="color:#C586C0;">if</span> (lists.<span style="color:#4EC9B0;">length</span> === <span style="color:#B5CEA8;">0</span>) <span style="color:#C586C0;">return</span> <span style="color:#C586C0;">null</span>;<br> <span style="color:#C586C0;">return</span> <span style="color:#DCDCAA;">solve</span>(lists, <span style="color:#B5CEA8;">0</span>, lists.<span style="color:#4EC9B0;">length</span> - <span style="color:#B5CEA8;">1</span>);<br>};<br><br><span style="color:#C586C0;">function</span> <span style="color:#DCDCAA;">solve</span>(lists, left, right) {<br> <span style="color:#C586C0;">if</span> (left === right) <span style="color:#C586C0;">return</span> lists[left];<br> <span style="color:#C586C0;">let</span> mid = <span style="color:#4EC9B0;">Math</span>.<span style="color:#4EC9B0;">floor</span>((left + right) / <span style="color:#B5CEA8;">2</span>);<br> <span style="color:#C586C0;">let</span> l1 = <span style="color:#DCDCAA;">solve</span>(lists, left, mid);<br> <span style="color:#C586C0;">let</span> l2 = <span style="color:#DCDCAA;">solve</span>(lists, mid + <span style="color:#B5CEA8;">1</span>, right);<br> <span style="color:#C586C0;">return</span> <span style="color:#DCDCAA;">mergeTwoLists</span>(l1, l2);<br>}<br><br><span style="color:#C586C0;">function</span> <span style="color:#DCDCAA;">mergeTwoLists</span>(l1, l2) {<br> <span style="color:#C586C0;">let</span> dummy = <span style="color:#C586C0;">new</span> <span style="color:#DCDCAA;">ListNode</span>(-<span style="color:#B5CEA8;">1</span>);<br> <span style="color:#C586C0;">let</span> pre = dummy;<br> <span style="color:#C586C0;">while</span> (l1 && l2) {<br> <span style="color:#C586C0;">if</span> (l1.val < l2.val) {<br> pre.next = l1;<br> l1 = l1.next;<br> } <span style="color:#C586C0;">else</span> {<br> pre.next = l2;<br> l2 = l2.next;<br> }<br> pre = pre.next;<br> }<br> pre.next = l1 || l2;<br> <span style="color:#C586C0;">return</span> dummy.next;<br>}<br>```</code></div><hr style='border:none; border-top:1px dashed #ccc; margin:20px 0;'><p style='color:#667eea; font-weight:bold; margin:15px 0 10px 0;'>📝 解法 2</p><div style='background:#1e1e1e; color:#d4d4d4; padding:15px; border-radius:8px; font-family:Consolas,Monaco,"Courier New",monospace; font-size:13px; line-height:1.5; overflow-x:auto; text-align:left; white-space:pre-wrap; border:1px solid #333;'><code style='font-family:inherit;'>```javascript<br><span style="color:#C586C0;">var</span> mergeKLists = <span style="color:#C586C0;">function</span>(lists) {<br> <span style="color:#C586C0;">let</span> dummy = <span style="color:#C586C0;">new</span> <span style="color:#DCDCAA;">ListNode</span>(-<span style="color:#B5CEA8;">1</span>);<br> <span style="color:#C586C0;">let</span> p = dummy;<br> <span style="color:#C586C0;">let</span> pq = <span style="color:#C586C0;">new</span> <span style="color:#DCDCAA;">MinHeap</span>((a, b) <span style="color:#C586C0;">=></span> a.val < b.val); <span style="color:#6A9955;">// 伪代码:假设有最小堆<br></span><br><br> <span style="color:#C586C0;">for</span> (<span style="color:#C586C0;">let</span> head <span style="color:#C586C0;">of</span> lists) {<br> <span style="color:#C586C0;">if</span> (head) pq.<span style="color:#4EC9B0;">push</span>(head);<br> }<br><br> <span style="color:#C586C0;">while</span> (!pq.<span style="color:#4EC9B0;">isEmpty</span>()) {<br> <span style="color:#C586C0;">let</span> node = pq.<span style="color:#4EC9B0;">pop</span>();<br> p.next = node;<br> <span style="color:#C586C0;">if</span> (node.next) pq.<span style="color:#4EC9B0;">push</span>(node.next);<br> p = p.next;<br> }<br> <span style="color:#C586C0;">return</span> dummy.next;<br>};<br>```</code></div></div>
<div style='background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); padding:20px; border-radius:12px; color:white;'><h2 style='margin:0 0 15px 0; font-size:20px;'>🔗 148. 排序链表</h2><p style='margin:10px 0;'><span style='background:#FFF3E0; color:#FF9800; padding:4px 12px; border-radius:12px; font-weight:bold; font-size:12px;'>Medium</span> <span style='background:rgba(255,255,255,0.2); padding:4px 12px; border-radius:12px; font-size:12px;'>归并排序</span></p><div style='background:rgba(255,255,255,0.15); padding:15px; border-radius:8px; margin:15px 0; font-size:14px; line-height:1.6;'>给你链表的头结点 `head` ,请将其按升序排列并返回排序后的链表(要求 $O(n \log n)$ 时间复杂度和 $O(1)$ 空间复杂度)。</div><p style='margin:15px 0 0 0;'><a href='https://leetcode-cn.com/problems/sort-list/' style='color:#fff; text-decoration:underline;'>📎 LeetCode 链接</a></p></div> <div style='padding:15px; background:#f5f5f5; border-radius:12px;'><h3 style='color:#333; margin:0 0 15px 0; border-bottom:2px solid #667eea; padding-bottom:10px;'>💡 解题代码</h3><div style='background:#1e1e1e; color:#d4d4d4; padding:15px; border-radius:8px; font-family:Consolas,Monaco,"Courier New",monospace; font-size:13px; line-height:1.5; overflow-x:auto; text-align:left; white-space:pre-wrap; border:1px solid #333;'><code style='font-family:inherit;'>```javascript<br><span style="color:#C586C0;">var</span> sortList = <span style="color:#C586C0;">function</span>(head) {<br> <span style="color:#C586C0;">return</span> <span style="color:#DCDCAA;">mergeSort</span>(head);<br>};<br><br><span style="color:#C586C0;">const</span> mergeSort = head <span style="color:#C586C0;">=></span> {<br> <span style="color:#C586C0;">if</span> (head === <span style="color:#C586C0;">null</span> || head.next === <span style="color:#C586C0;">null</span>) {<br> <span style="color:#C586C0;">return</span> head;<br> }<br> <span style="color:#C586C0;">let</span> slow = head;<br> <span style="color:#C586C0;">let</span> fast = head.next.next;<br> <span style="color:#C586C0;">while</span> (fast !== <span style="color:#C586C0;">null</span> && fast.next !== <span style="color:#C586C0;">null</span>) {<br> slow = slow.next;<br> fast = fast.next.next;<br> }<br> <span style="color:#C586C0;">let</span> mid = slow.next;<br> slow.next = <span style="color:#C586C0;">null</span>;<br> <span style="color:#C586C0;">let</span> left = <span style="color:#DCDCAA;">mergeSort</span>(head);<br> <span style="color:#C586C0;">let</span> right = <span style="color:#DCDCAA;">mergeSort</span>(mid);<br> <span style="color:#C586C0;">return</span> <span style="color:#DCDCAA;">merge</span>(left, right);<br>}<br><br><span style="color:#C586C0;">const</span> merge = (l1, l2) <span style="color:#C586C0;">=></span> {<br> <span style="color:#C586C0;">let</span> dummy = <span style="color:#C586C0;">new</span> <span style="color:#DCDCAA;">ListNode</span>(-<span style="color:#B5CEA8;">1</span>);<br> <span style="color:#C586C0;">let</span> pre = dummy;<br> <span style="color:#C586C0;">while</span> (l1 !== <span style="color:#C586C0;">null</span> && l2 !== <span style="color:#C586C0;">null</span>) {<br> <span style="color:#C586C0;">if</span> (l1.val < l2.val) {<br> pre.next = l1;<br> l1 = l1.next;<br> } <span style="color:#C586C0;">else</span> {<br> pre.next = l2;<br> l2 = l2.next;<br> }<br> pre = pre.next;<br> }<br> pre.next = l1 !== <span style="color:#C586C0;">null</span> ? l1 : l2;<br> <span style="color:#C586C0;">return</span> dummy.next;<br>}<br>```</code></div></div>
<div style='background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); padding:20px; border-radius:12px; color:white;'><h2 style='margin:0 0 15px 0; font-size:20px;'>🔗 补充题1. 排序奇升偶降链表</h2><p style='margin:10px 0;'><span style='background:#FFF3E0; color:#FF9800; padding:4px 12px; border-radius:12px; font-weight:bold; font-size:12px;'>Medium</span></p><div style='background:rgba(255,255,255,0.15); padding:15px; border-radius:8px; margin:15px 0; font-size:14px; line-height:1.6;'>给定一个奇数位升序,偶数位降序的链表,将其排序为升序。 (思路:拆分、反转偶数链表、合并)</div><p style='margin:15px 0 0 0;'><a href='https://leetcode-cn.com/problems/sort-list/' style='color:#fff; text-decoration:underline;'>📎 LeetCode 链接</a></p></div> <div style='padding:15px; background:#f5f5f5; border-radius:12px;'><h3 style='color:#333; margin:0 0 15px 0; border-bottom:2px solid #667eea; padding-bottom:10px;'>💡 解题代码</h3><p style='color:#999; font-style:italic; text-align:center; padding:20px;'>暂无代码答案,请参考 LeetCode 官方题解</p></div>
<div style='background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); padding:20px; border-radius:12px; color:white;'><h2 style='margin:0 0 15px 0; font-size:20px;'>🔗 141. 环形链表</h2><p style='margin:10px 0;'><span style='background:#E8F5E9; color:#4CAF50; padding:4px 12px; border-radius:12px; font-weight:bold; font-size:12px;'>Easy</span> <span style='background:rgba(255,255,255,0.2); padding:4px 12px; border-radius:12px; font-size:12px;'>判圈</span></p><div style='background:rgba(255,255,255,0.15); padding:15px; border-radius:8px; margin:15px 0; font-size:14px; line-height:1.6;'>给你一个链表的头节点 `head` ,判断链表中是否有环。</div><p style='margin:15px 0 0 0;'><a href='https://leetcode-cn.com/problems/linked-list-cycle/' style='color:#fff; text-decoration:underline;'>📎 LeetCode 链接</a></p></div> <div style='padding:15px; background:#f5f5f5; border-radius:12px;'><h3 style='color:#333; margin:0 0 15px 0; border-bottom:2px solid #667eea; padding-bottom:10px;'>💡 解题代码</h3><div style='background:#1e1e1e; color:#d4d4d4; padding:15px; border-radius:8px; font-family:Consolas,Monaco,"Courier New",monospace; font-size:13px; line-height:1.5; overflow-x:auto; text-align:left; white-space:pre-wrap; border:1px solid #333;'><code style='font-family:inherit;'>```javascript<br><span style="color:#C586C0;">var</span> hasCycle = <span style="color:#C586C0;">function</span>(head) {<br> <span style="color:#C586C0;">let</span> slow = head;<br> <span style="color:#C586C0;">let</span> fast = head;<br> <span style="color:#C586C0;">while</span> (fast !== <span style="color:#C586C0;">null</span> && fast.next !== <span style="color:#C586C0;">null</span>) {<br> slow = slow.next;<br> fast = fast.next.next;<br> <span style="color:#C586C0;">if</span> (slow === fast) <span style="color:#C586C0;">return</span> <span style="color:#C586C0;">true</span>;<br> }<br> <span style="color:#C586C0;">return</span> <span style="color:#C586C0;">false</span>;<br>};<br>```</code></div></div>
<div style='background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); padding:20px; border-radius:12px; color:white;'><h2 style='margin:0 0 15px 0; font-size:20px;'>🔗 142. 环形链表 II</h2><p style='margin:10px 0;'><span style='background:#FFF3E0; color:#FF9800; padding:4px 12px; border-radius:12px; font-weight:bold; font-size:12px;'>Medium</span> <span style='background:rgba(255,255,255,0.2); padding:4px 12px; border-radius:12px; font-size:12px;'>找入口</span></p><div style='background:rgba(255,255,255,0.15); padding:15px; border-radius:8px; margin:15px 0; font-size:14px; line-height:1.6;'>给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回 `null`。</div><p style='margin:15px 0 0 0;'><a href='https://leetcode-cn.com/problems/linked-list-cycle-ii/' style='color:#fff; text-decoration:underline;'>📎 LeetCode 链接</a></p></div> <div style='padding:15px; background:#f5f5f5; border-radius:12px;'><h3 style='color:#333; margin:0 0 15px 0; border-bottom:2px solid #667eea; padding-bottom:10px;'>💡 解题代码</h3><div style='background:#1e1e1e; color:#d4d4d4; padding:15px; border-radius:8px; font-family:Consolas,Monaco,"Courier New",monospace; font-size:13px; line-height:1.5; overflow-x:auto; text-align:left; white-space:pre-wrap; border:1px solid #333;'><code style='font-family:inherit;'>```javascript<br><span style="color:#C586C0;">var</span> detectCycle = <span style="color:#C586C0;">function</span>(head) {<br> <span style="color:#C586C0;">let</span> slow = head;<br> <span style="color:#C586C0;">let</span> fast = head;<br> <span style="color:#C586C0;">while</span> (fast !== <span style="color:#C586C0;">null</span> && fast.next !== <span style="color:#C586C0;">null</span>) {<br> slow = slow.next;<br> fast = fast.next.next;<br> <span style="color:#C586C0;">if</span> (slow === fast) {<br> slow = head;<br> <span style="color:#C586C0;">while</span> (slow !== fast) {<br> slow = slow.next;<br> fast = fast.next;<br> }<br> <span style="color:#C586C0;">return</span> slow;<br> }<br> }<br> <span style="color:#C586C0;">return</span> <span style="color:#C586C0;">null</span>;<br>};<br>```</code></div></div>
<div style='background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); padding:20px; border-radius:12px; color:white;'><h2 style='margin:0 0 15px 0; font-size:20px;'>🔗 160. 相交链表</h2><p style='margin:10px 0;'><span style='background:#E8F5E9; color:#4CAF50; padding:4px 12px; border-radius:12px; font-weight:bold; font-size:12px;'>Easy</span></p><div style='background:rgba(255,255,255,0.15); padding:15px; border-radius:8px; margin:15px 0; font-size:14px; line-height:1.6;'>给你两个单链表的头节点 `headA` 和 `headB` ,请你找出并返回两个单链表相交的起始节点。</div><p style='margin:15px 0 0 0;'><a href='https://leetcode-cn.com/problems/intersection-of-two-linked-lists/' style='color:#fff; text-decoration:underline;'>📎 LeetCode 链接</a></p></div> <div style='padding:15px; background:#f5f5f5; border-radius:12px;'><h3 style='color:#333; margin:0 0 15px 0; border-bottom:2px solid #667eea; padding-bottom:10px;'>💡 解题代码</h3><div style='background:#1e1e1e; color:#d4d4d4; padding:15px; border-radius:8px; font-family:Consolas,Monaco,"Courier New",monospace; font-size:13px; line-height:1.5; overflow-x:auto; text-align:left; white-space:pre-wrap; border:1px solid #333;'><code style='font-family:inherit;'>```javascript<br><span style="color:#C586C0;">var</span> getIntersectionNode = <span style="color:#C586C0;">function</span>(headA, headB) {<br> <span style="color:#C586C0;">if</span> (headA === <span style="color:#C586C0;">null</span> || headB === <span style="color:#C586C0;">null</span>) <span style="color:#C586C0;">return</span> <span style="color:#C586C0;">null</span>;<br> <span style="color:#C586C0;">let</span> pA = headA;<br> <span style="color:#C586C0;">let</span> pB = headB;<br> <br> <span style="color:#6A9955;">// 只要不相等就继续走<br></span><br> <span style="color:#C586C0;">while</span> (pA !== pB) {<br> <span style="color:#6A9955;">// 走完 A 就走 B,走完 B 就走 A<br></span><br> pA = pA === <span style="color:#C586C0;">null</span> ? headB : pA.next;<br> pB = pB === <span style="color:#C586C0;">null</span> ? headA : pB.next;<br> }<br> <br> <span style="color:#C586C0;">return</span> pA;<br>};<br>```</code></div></div>
<div style='background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); padding:20px; border-radius:12px; color:white;'><h2 style='margin:0 0 15px 0; font-size:20px;'>🔗 19. 删除链表的倒数第N个节点</h2><p style='margin:10px 0;'><span style='background:#FFF3E0; color:#FF9800; padding:4px 12px; border-radius:12px; font-weight:bold; font-size:12px;'>Medium</span></p><div style='background:rgba(255,255,255,0.15); padding:15px; border-radius:8px; margin:15px 0; font-size:14px; line-height:1.6;'>给你一个链表,删除链表的倒数第 `n` 个结点,并且返回链表的头结点。</div><p style='margin:15px 0 0 0;'><a href='https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/' style='color:#fff; text-decoration:underline;'>📎 LeetCode 链接</a></p></div> <div style='padding:15px; background:#f5f5f5; border-radius:12px;'><h3 style='color:#333; margin:0 0 15px 0; border-bottom:2px solid #667eea; padding-bottom:10px;'>💡 解题代码</h3><p style='color:#999; font-style:italic; text-align:center; padding:20px;'>暂无代码答案,请参考 LeetCode 官方题解</p></div>
<div style='background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); padding:20px; border-radius:12px; color:white;'><h2 style='margin:0 0 15px 0; font-size:20px;'>🔗 剑指 Offer 22. 链表中倒数第k个节点</h2><p style='margin:10px 0;'><span style='background:#E8F5E9; color:#4CAF50; padding:4px 12px; border-radius:12px; font-weight:bold; font-size:12px;'>Easy</span></p><div style='background:rgba(255,255,255,0.15); padding:15px; border-radius:8px; margin:15px 0; font-size:14px; line-height:1.6;'>输入一个链表,输出该链表中倒数第 `k` 个节点。</div><p style='margin:15px 0 0 0;'><a href='https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/' style='color:#fff; text-decoration:underline;'>📎 LeetCode 链接</a></p></div> <div style='padding:15px; background:#f5f5f5; border-radius:12px;'><h3 style='color:#333; margin:0 0 15px 0; border-bottom:2px solid #667eea; padding-bottom:10px;'>💡 解题代码</h3><p style='color:#999; font-style:italic; text-align:center; padding:20px;'>暂无代码答案,请参考 LeetCode 官方题解</p></div>
<div style='background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); padding:20px; border-radius:12px; color:white;'><h2 style='margin:0 0 15px 0; font-size:20px;'>🔗 143. 重排链表</h2><p style='margin:10px 0;'><span style='background:#FFF3E0; color:#FF9800; padding:4px 12px; border-radius:12px; font-weight:bold; font-size:12px;'>Medium</span> <span style='background:rgba(255,255,255,0.2); padding:4px 12px; border-radius:12px; font-size:12px;'>中点+反转+合并</span></p><div style='background:rgba(255,255,255,0.15); padding:15px; border-radius:8px; margin:15px 0; font-size:14px; line-height:1.6;'>给定一个单链表 $L_0 \to L_1 \to \dots \to L_{n-1} \to L_n$ ,将其重新排列后变为: $L_0 \to L_n \to L_1 \to L_{n-1} \to L_2 \to L_{n-2} \to \dots$</div><p style='margin:15px 0 0 0;'><a href='https://leetcode-cn.com/problems/reorder-list/' style='color:#fff; text-decoration:underline;'>📎 LeetCode 链接</a></p></div> <div style='padding:15px; background:#f5f5f5; border-radius:12px;'><h3 style='color:#333; margin:0 0 15px 0; border-bottom:2px solid #667eea; padding-bottom:10px;'>💡 解题代码</h3><div style='background:#1e1e1e; color:#d4d4d4; padding:15px; border-radius:8px; font-family:Consolas,Monaco,"Courier New",monospace; font-size:13px; line-height:1.5; overflow-x:auto; text-align:left; white-space:pre-wrap; border:1px solid #333;'><code style='font-family:inherit;'>```javascript<br><span style="color:#C586C0;">var</span> reorderList = <span style="color:#C586C0;">function</span>(head) {<br> <span style="color:#C586C0;">if</span> (head === <span style="color:#C586C0;">null</span>) <span style="color:#C586C0;">return</span>;<br> <span style="color:#C586C0;">let</span> slow = head;<br> <span style="color:#C586C0;">let</span> fast = head;<br> <span style="color:#C586C0;">while</span> (fast !== <span style="color:#C586C0;">null</span> && fast.next !== <span style="color:#C586C0;">null</span>) {<br> slow = slow.next;<br> fast = fast.next.next;<br> }<br> <br> <span style="color:#C586C0;">let</span> prev = <span style="color:#C586C0;">null</span>;<br> <span style="color:#C586C0;">let</span> cur = slow.next;<br> slow.next = <span style="color:#C586C0;">null</span>;<br> <span style="color:#C586C0;">while</span> (cur !== <span style="color:#C586C0;">null</span>) {<br> <span style="color:#C586C0;">let</span> next = cur.next;<br> cur.next = prev;<br> prev = cur;<br> cur = next;<br> }<br> <br> <span style="color:#C586C0;">let</span> head1 = head;<br> <span style="color:#C586C0;">let</span> head2 = prev;<br> <span style="color:#C586C0;">while</span> (head1 !== <span style="color:#C586C0;">null</span> && head2 !== <span style="color:#C586C0;">null</span>) {<br> <span style="color:#C586C0;">let</span> next1 = head1.next;<br> <span style="color:#C586C0;">let</span> next2 = head2.next;<br> head1.next = head2;<br> head1 = next1;<br> head2.next = next1; <span style="color:#6A9955;">// 修正逻辑:head1->head2->next1<br></span><br> head2 = next2;<br> }<br>};<br>```</code></div></div>
<div style='background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); padding:20px; border-radius:12px; color:white;'><h2 style='margin:0 0 15px 0; font-size:20px;'>🔗 2. 两数相加</h2><p style='margin:10px 0;'><span style='background:#FFF3E0; color:#FF9800; padding:4px 12px; border-radius:12px; font-weight:bold; font-size:12px;'>Medium</span></p><div style='background:rgba(255,255,255,0.15); padding:15px; border-radius:8px; margin:15px 0; font-size:14px; line-height:1.6;'>给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的。请你将两个数相加。</div><p style='margin:15px 0 0 0;'><a href='https://leetcode-cn.com/problems/add-two-numbers/' style='color:#fff; text-decoration:underline;'>📎 LeetCode 链接</a></p></div> <div style='padding:15px; background:#f5f5f5; border-radius:12px;'><h3 style='color:#333; margin:0 0 15px 0; border-bottom:2px solid #667eea; padding-bottom:10px;'>💡 解题代码</h3><p style='color:#667eea; font-weight:bold; margin:15px 0 10px 0;'>📝 解法 1</p><div style='background:#1e1e1e; color:#d4d4d4; padding:15px; border-radius:8px; font-family:Consolas,Monaco,"Courier New",monospace; font-size:13px; line-height:1.5; overflow-x:auto; text-align:left; white-space:pre-wrap; border:1px solid #333;'><code style='font-family:inherit;'>```javascript<br><span style="color:#C586C0;">var</span> genericSolution = <span style="color:#C586C0;">function</span>(head) {<br> <span style="color:#C586C0;">let</span> dummy = <span style="color:#C586C0;">new</span> <span style="color:#DCDCAA;">ListNode</span>(-<span style="color:#B5CEA8;">1</span>); <span style="color:#6A9955;">// 哨兵节点<br></span><br> dummy.next = head;<br> <span style="color:#C586C0;">let</span> pre = dummy; <br> <span style="color:#C586C0;">let</span> cur = head;<br> <span style="color:#C586C0;">while</span> (cur !== <span style="color:#C586C0;">null</span>) {<br> <span style="color:#6A9955;">// 逻辑处理...<br></span><br> cur = cur.next;<br> }<br> <span style="color:#C586C0;">return</span> dummy.next;<br>};<br>```</code></div><hr style='border:none; border-top:1px dashed #ccc; margin:20px 0;'><p style='color:#667eea; font-weight:bold; margin:15px 0 10px 0;'>📝 解法 2</p><div style='background:#1e1e1e; color:#d4d4d4; padding:15px; border-radius:8px; font-family:Consolas,Monaco,"Courier New",monospace; font-size:13px; line-height:1.5; overflow-x:auto; text-align:left; white-space:pre-wrap; border:1px solid #333;'><code style='font-family:inherit;'>```javascript<br><span style="color:#C586C0;">var</span> findMiddle = <span style="color:#C586C0;">function</span>(head) {<br> <span style="color:#C586C0;">let</span> slow = head;<br> <span style="color:#C586C0;">let</span> fast = head.next; <br> <span style="color:#C586C0;">while</span> (fast !== <span style="color:#C586C0;">null</span> && fast.next !== <span style="color:#C586C0;">null</span>) {<br> slow = slow.next;<br> fast = fast.next.next;<br> }<br> <span style="color:#C586C0;">return</span> slow; <br>};<br>```</code></div><hr style='border:none; border-top:1px dashed #ccc; margin:20px 0;'><p style='color:#667eea; font-weight:bold; margin:15px 0 10px 0;'>📝 解法 3</p><div style='background:#1e1e1e; color:#d4d4d4; padding:15px; border-radius:8px; font-family:Consolas,Monaco,"Courier New",monospace; font-size:13px; line-height:1.5; overflow-x:auto; text-align:left; white-space:pre-wrap; border:1px solid #333;'><code style='font-family:inherit;'>```javascript<br><span style="color:#C586C0;">var</span> reverseList = <span style="color:#C586C0;">function</span>(head) {<br> <span style="color:#C586C0;">let</span> prev = <span style="color:#C586C0;">null</span>;<br> <span style="color:#C586C0;">let</span> curr = head;<br> <span style="color:#C586C0;">while</span> (curr !== <span style="color:#C586C0;">null</span>) {<br> <span style="color:#C586C0;">let</span> nextTemp = curr.next; <br> curr.next = prev; <br> prev = curr; <br> curr = nextTemp;<br> }<br> <span style="color:#C586C0;">return</span> prev; <br>};<br>```</code></div></div>
<div style='background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); padding:20px; border-radius:12px; color:white;'><h2 style='margin:0 0 15px 0; font-size:20px;'>🔗 146. LRU缓存机制</h2><p style='margin:10px 0;'><span style='background:#FFF3E0; color:#FF9800; padding:4px 12px; border-radius:12px; font-weight:bold; font-size:12px;'>Medium</span> <span style='background:rgba(255,255,255,0.2); padding:4px 12px; border-radius:12px; font-size:12px;'>双向链表+哈希</span></p><div style='background:rgba(255,255,255,0.15); padding:15px; border-radius:8px; margin:15px 0; font-size:14px; line-height:1.6;'>设计并实现一个满足 LRU (最近最少使用) 缓存约束的数据结构。</div><p style='margin:15px 0 0 0;'><a href='https://leetcode-cn.com/problems/lru-cache/' style='color:#fff; text-decoration:underline;'>📎 LeetCode 链接</a></p></div> <div style='padding:15px; background:#f5f5f5; border-radius:12px;'><h3 style='color:#333; margin:0 0 15px 0; border-bottom:2px solid #667eea; padding-bottom:10px;'>💡 解题代码</h3><div style='background:#1e1e1e; color:#d4d4d4; padding:15px; border-radius:8px; font-family:Consolas,Monaco,"Courier New",monospace; font-size:13px; line-height:1.5; overflow-x:auto; text-align:left; white-space:pre-wrap; border:1px solid #333;'><code style='font-family:inherit;'>```javascript<br><span style="color:#6A9955;">/**<br> * @param {number} capacity<br> */</span><br><span style="color:#C586C0;">var</span> LRUCache = <span style="color:#C586C0;">function</span>(capacity) {<br> <span style="color:#C586C0;">this</span>.capacity = capacity;<br> <span style="color:#C586C0;">this</span>.<span style="color:#4EC9B0;">map</span> = <span style="color:#C586C0;">new</span> <span style="color:#4EC9B0;">Map</span>(); <span style="color:#6A9955;">// key -> node<br></span><br> <span style="color:#C586C0;">this</span>.head = <span style="color:#C586C0;">new</span> <span style="color:#DCDCAA;">ListNode</span>(-<span style="color:#B5CEA8;">1</span>, -<span style="color:#B5CEA8;">1</span>); <span style="color:#6A9955;">// 虚拟头<br></span><br> <span style="color:#C586C0;">this</span>.tail = <span style="color:#C586C0;">new</span> <span style="color:#DCDCAA;">ListNode</span>(-<span style="color:#B5CEA8;">1</span>, -<span style="color:#B5CEA8;">1</span>); <span style="color:#6A9955;">// 虚拟尾<br></span><br> <span style="color:#C586C0;">this</span>.head.next = <span style="color:#C586C0;">this</span>.tail;<br> <span style="color:#C586C0;">this</span>.tail.prev = <span style="color:#C586C0;">this</span>.head;<br>};<br><br><span style="color:#C586C0;">function</span> <span style="color:#DCDCAA;">ListNode</span>(key, val) {<br> <span style="color:#C586C0;">this</span>.key = key;<br> <span style="color:#C586C0;">this</span>.val = val;<br> <span style="color:#C586C0;">this</span>.prev = <span style="color:#C586C0;">null</span>;<br> <span style="color:#C586C0;">this</span>.next = <span style="color:#C586C0;">null</span>;<br>}<br><br><span style="color:#6A9955;">/** <br> * @param {number} key<br> * @<span style="color:#C586C0;">return</span> {number}<br> */</span><br>LRUCache.<span style="color:#4EC9B0;">prototype</span>.<span style="color:#C586C0;"><span style="color:#4EC9B0;">get</span></span> = <span style="color:#C586C0;">function</span>(key) {<br> <span style="color:#C586C0;">if</span> (!<span style="color:#C586C0;">this</span>.<span style="color:#4EC9B0;">map</span>.<span style="color:#4EC9B0;">has</span>(key)) <span style="color:#C586C0;">return</span> -<span style="color:#B5CEA8;">1</span>;<br> <span style="color:#C586C0;">const</span> node = <span style="color:#C586C0;">this</span>.<span style="color:#4EC9B0;">map</span>.<span style="color:#C586C0;"><span style="color:#4EC9B0;">get</span></span>(key);<br> <span style="color:#C586C0;">this</span>.<span style="color:#DCDCAA;">moveToHead</span>(node); <span style="color:#6A9955;">// 访问后移到头部<br></span><br> <span style="color:#C586C0;">return</span> node.val;<br>};<br><br><span style="color:#6A9955;">/** <br> * @param {number} key <br> * @param {number} value<br> * @<span style="color:#C586C0;">return</span> {void}<br> */</span><br>LRUCache.<span style="color:#4EC9B0;">prototype</span>.put = <span style="color:#C586C0;">function</span>(key, value) {<br> <span style="color:#C586C0;">if</span> (<span style="color:#C586C0;">this</span>.<span style="color:#4EC9B0;">map</span>.<span style="color:#4EC9B0;">has</span>(key)) {<br> <span style="color:#C586C0;">const</span> node = <span style="color:#C586C0;">this</span>.<span style="color:#4EC9B0;">map</span>.<span style="color:#C586C0;"><span style="color:#4EC9B0;">get</span></span>(key);<br> node.val = value;<br> <span style="color:#C586C0;">this</span>.<span style="color:#DCDCAA;">moveToHead</span>(node);<br> } <span style="color:#C586C0;">else</span> {<br> <span style="color:#C586C0;">if</span> (<span style="color:#C586C0;">this</span>.<span style="color:#4EC9B0;">map</span>.<span style="color:#4EC9B0;">size</span> === <span style="color:#C586C0;">this</span>.capacity) {<br> <span style="color:#C586C0;">const</span> lastNode = <span style="color:#C586C0;">this</span>.tail.prev;<br> <span style="color:#C586C0;">this</span>.<span style="color:#DCDCAA;">removeNode</span>(lastNode);<br> <span style="color:#C586C0;">this</span>.<span style="color:#4EC9B0;">map</span>.<span style="color:#4EC9B0;">delete</span>(lastNode.key);<br> }<br> <span style="color:#C586C0;">const</span> newNode = <span style="color:#C586C0;">new</span> <span style="color:#DCDCAA;">ListNode</span>(key, value);<br> <span style="color:#C586C0;">this</span>.<span style="color:#DCDCAA;">addNodeToHead</span>(newNode);<br> <span style="color:#C586C0;">this</span>.<span style="color:#4EC9B0;">map</span>.<span style="color:#C586C0;"><span style="color:#4EC9B0;">set</span></span>(key, newNode);<br> }<br>};<br><br><span style="color:#6A9955;">// 辅助函数:将节点移到头部<br></span><br>LRUCache.<span style="color:#4EC9B0;">prototype</span>.moveToHead = <span style="color:#C586C0;">function</span>(node) {<br> <span style="color:#C586C0;">this</span>.<span style="color:#DCDCAA;">removeNode</span>(node);<br> <span style="color:#C586C0;">this</span>.<span style="color:#DCDCAA;">addNodeToHead</span>(node);<br>};<br><br><span style="color:#6A9955;">// 辅助函数:删除节点<br></span><br>LRUCache.<span style="color:#4EC9B0;">prototype</span>.removeNode = <span style="color:#C586C0;">function</span>(node) {<br> node.prev.next = node.next;<br> node.next.prev = node.prev;<br>};<br><br><span style="color:#6A9955;">// 辅助函数:在头部插入节点<br></span><br>LRUCache.<span style="color:#4EC9B0;">prototype</span>.addNodeToHead = <span style="color:#C586C0;">function</span>(node) {<br> node.next = <span style="color:#C586C0;">this</span>.head.next;<br> node.prev = <span style="color:#C586C0;">this</span>.head;<br> <span style="color:#C586C0;">this</span>.head.next.prev = node;<br> <span style="color:#C586C0;">this</span>.head.next = node;<br>};<br>```</code></div></div>
<div style='background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); padding:20px; border-radius:12px; color:white;'><h2 style='margin:0 0 15px 0; font-size:20px;'>🔗 82. 删除排序链表中的重复元素 II</h2><p style='margin:10px 0;'><span style='background:#FFF3E0; color:#FF9800; padding:4px 12px; border-radius:12px; font-weight:bold; font-size:12px;'>Medium</span></p><div style='background:rgba(255,255,255,0.15); padding:15px; border-radius:8px; margin:15px 0; font-size:14px; line-height:1.6;'>给定一个已排序的链表的头 `head` ,删除所有含有重复数字的节点,只保留原始链表中未重复出现的数字。</div><p style='margin:15px 0 0 0;'><a href='https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/' style='color:#fff; text-decoration:underline;'>📎 LeetCode 链接</a></p></div> <div style='padding:15px; background:#f5f5f5; border-radius:12px;'><h3 style='color:#333; margin:0 0 15px 0; border-bottom:2px solid #667eea; padding-bottom:10px;'>💡 解题代码</h3><div style='background:#1e1e1e; color:#d4d4d4; padding:15px; border-radius:8px; font-family:Consolas,Monaco,"Courier New",monospace; font-size:13px; line-height:1.5; overflow-x:auto; text-align:left; white-space:pre-wrap; border:1px solid #333;'><code style='font-family:inherit;'>```javascript<br><span style="color:#C586C0;">var</span> deleteDuplicates = <span style="color:#C586C0;">function</span>(head) {<br> <span style="color:#C586C0;">let</span> dummy = <span style="color:#C586C0;">new</span> <span style="color:#DCDCAA;">ListNode</span>(-<span style="color:#B5CEA8;">1</span>);<br> dummy.next = head;<br> <span style="color:#C586C0;">let</span> pre = dummy;<br> <span style="color:#C586C0;">while</span> (pre.next !== <span style="color:#C586C0;">null</span> && pre.next.next !== <span style="color:#C586C0;">null</span>) {<br> <span style="color:#C586C0;">if</span> (pre.next.val === pre.next.next.val) {<br> <span style="color:#C586C0;">let</span> val = pre.next.val;<br> <span style="color:#C586C0;">while</span> (pre.next !== <span style="color:#C586C0;">null</span> && pre.next.val === val) {<br> pre.next = pre.next.next;<br> }<br> } <span style="color:#C586C0;">else</span> {<br> pre = pre.next;<br> }<br> }<br> <span style="color:#C586C0;">return</span> dummy.next;<br>}<br>```</code></div></div>