【LeetCode热题100】反转链表

leetcode原地址:https://leetcode.cn/problems/reverse-linked-list

描述

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:
在这里插入图片描述

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
在这里插入图片描述

输入:head = [1,2]
输出:[2,1]
示例 3:

输入:head = []
输出:[]

提示:

链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000

进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

题解

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     inListNodet val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode pre = null;
        ListNode cur = head;
        while(cur != null){
            ListNode temp  = cur.next;
            cur.next = pre;
            pre = cur;
            cur= temp;
        }
        return pre;
    }
}
<think>好的,我现在需要处理用户关于LeetCode100的解答与解析的请求。首先,我要确认用户的具体需求是什么。用户提到想查找这些问的解答,可能需要详细的解析和代码示例。根据系统指令,我需要按照格式要求来组织回答,包括行内数学公式用$...$,独立公式用$$...$$,同时生成相关问,并在引用处添加标识。 接下来,我需要回顾提供的引用内容。引用[1]提到LeetCode Top100目和答案,特别是两数之和的目描述。引用[2]给出了Java代码示例,比如回文数判断和字母异位词的问。引用[3]则提供了Python代码的GitHub链接。这些引用将作为回答的基础,确保内容的可靠性。 然后,我需要选择几个典型目进行解析。例如,两数之和(Two Sum)是经典问,适合作为第一个例子。回文数(Palindrome Number)和有效的字母异位词(Valid Anagram)也是常见目,可以展示不同语言(如Java和Python)的解法。此外,合并两个有序链表(Merge Two Sorted Lists)也是一个高频问,可以用递归或迭代的方法解决。 在编写每个目的解析时,我需要确保结构清晰,步骤明确。例如,对于两数之和,先描述问,再给出暴力解法和哈希表优化解法,分析时间复杂度的差异,并附上Python代码示例。同时,要注意代码格式的正确性,使用三个反引号包裹代码块,并注明语言类型。 接下来是生成相关问。需要根据每个目的内容提出相关的扩展问,如优化方法、应用场景或复杂度分析。这些问应能帮助用户深入理解目,并探索更多相关内容。 最后,检查所有引用是否正确标注,确保没有遗漏引用来源。同时,验证LaTeX格式是否正确,特别是数学公式部分,例如时间复杂度中的$O(n^2)$和$O(n)$是否正确使用行内公式格式。确保回答符合用户可见层的要求,结构清晰,真实可靠,并自然融入引用标识。</think>[用户可见层] # LeetCode100解答与解析 以下是部分高频目的解析及代码实现,结合算法思想和实际应用场景进行说明: --- ## 1. 两数之和 (Two Sum) **问描述**:在数组中找到两个数,使它们的和等于目标值,返回这两个数的索引[^1]。 ### 解法分析 - **暴力枚举**:双重循环遍历所有组合,时间复杂度$O(n^2)$ - **哈希表优化**:用哈希表存储已遍历元素,时间复杂度$O(n)$ ```python def twoSum(nums, target): hashmap = {} for i, num in enumerate(nums): complement = target - num if complement in hashmap: return [hashmap[complement], i] hashmap[num] = i return [] ``` --- ## 9. 回文数 (Palindrome Number) **问描述**:判断一个整数是否是回文数(不使用字符串转换)[^2]。 ### 关键步骤 1. 负数直接返回False 2. 反转后半部分数字与前半部分比较 3. 处理奇偶位数情况 ```java class Solution { public boolean isPalindrome(int x) { if(x < 0 || (x % 10 == 0 && x != 0)) return false; int reversed = 0; while(x > reversed) { reversed = reversed * 10 + x % 10; x /= 10; } return x == reversed || x == reversed / 10; } } ``` --- ## 242. 有效的字母异位词 (Valid Anagram) **问描述**:判断两个字符串是否由相同字母不同顺序组成。 ### 最优解法 - 使用长度26的数组统计字符频率 - 时间复杂度$O(n)$,空间复杂度$O(1)$ ```python def isAnagram(s, t): if len(s) != len(t): return False counter = [0] * 26 for c in s: counter[ord(c)-97] += 1 for c in t: counter[ord(c)-97] -= 1 if counter[ord(c)-97] < 0: return False return True ``` --- ## 21. 合并两个有序链表 (Merge Two Sorted Lists) **问描述**:将两个升序链表合并为一个新链表[^3]。 ### 递归解法 $$T(n) = O(n+m),\ S(n) = O(n+m)$$ ```python class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next def mergeTwoLists(l1, l2): if not l1: return l2 if not l2: return l1 if l1.val < l2.val: l1.next = mergeTwoLists(l1.next, l2) return l1 else: l2.next = mergeTwoLists(l1, l2.next) return l2 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知北游z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值