LeetCode题解
相信自己是战胜一切的奇妙魔法
这个作者很懒,什么都没留下…
展开
-
Leetcode——328.奇偶链表
链表——奇偶链表【解法1】迭代给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。使用原地算法完成。算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL【解法1】迭代定义奇偶链表的头指针和尾指针(头负责定位,尾负责迭代)原创 2021-03-14 11:11:59 · 143 阅读 · 0 评论 -
Leetcode——24.两两交换链表中的节点
链表——两两交换链表中的节点Given 1->2->3->4, you should return the list as 2->1->4->3.要求:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。不能修改结点的 val 值,O(1) 空间复杂度。【解法1】递归basecase:只要一个结点或空链表无需操作。假设返回了已交换好的链表, public ListNode swapPairs(ListNode head) { if原创 2021-03-05 15:21:33 · 118 阅读 · 1 评论 -
Leetcode——19.删除链表的倒数第 N 个结点
链表——删除链表的倒数第 N 个结点【解法1】双指针【解法1】双指针快慢指针:由于我们要找到倒数第n个结点,因此我们可以使用快指针fast和慢指针slow同时对链表进行遍历,并且fast比slow超前n个结点。当fast遍历到null时,slow刚好处于倒数第N个结点。但由于是删除结点,必须要找到其前缀,有while(fast.next != null)。注意可能会要求删除第一个结点public ListNode removeNthFromEnd(ListNode head, int n) {原创 2021-03-04 16:19:57 · 254 阅读 · 1 评论 -
Leetcode——83.删除链表中的重复元素
链表——删除链表中的重复元素给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例:输入: 1->1->2->3->3输出: 1->2->3【解法1】单指针迭代:由于是有序链表,重复元素必相邻。因此我们可以通过比较当前结点与它之后的结点比较来确定是否重复。若重复,我们可以更改当前结点的next指针,让他跳过下一个结点,指向下一个结点之后的结点。public ListNode deleteDuplicates(ListNode head) {原创 2021-03-04 10:34:58 · 142 阅读 · 1 评论 -
Leetcode——206.链表反转
链表——反转链表【题目】反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地翻转链表。用两种方法解决这道题。【解法1】迭代假设链表为 1→2→3→∅ ,要改为 ∅←1←2←3。在遍历链表时,将当前结点的next指向前一个结点,需要一个pre变量存储,另外还需要一个next变量保存后一个结点,以更改引用。public ListNode revers原创 2021-03-01 19:04:55 · 115 阅读 · 0 评论 -
Leetcode链表-——160.相交链表
链表——无环单链表相交【题目】编写一个程序,找到两个单链表相交的起始节点。((Easy))例如以下示例中 A 和 B 两个链表相交于 c1:A: a1 → a2 ↘ c1 → c2 → c3 ↗B: b1 → b2 → b3但是因为单链表的每个节点只有一个next指针,即只能有一个后继结点。而不会出现下图结点c有两个后继结点。即只要两个单链表相交,必原创 2021-03-01 09:41:11 · 85 阅读 · 0 评论