摘要: 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 这个题逻辑上不算复杂,写起来异常复杂,首先将原表头作为新表头,然后依次取原表里的结点与新表的结点比较,如果小于新表头就头插。大于新表头则遍历新表的结点找到合适的位置插入,特殊情况遍历到表尾也不满足则尾插,然后迭代原表结点。 阅读全文
posted @ 2021-05-24 21:07 偶遇的 阅读(71) 评论(0) 推荐(0)
摘要: 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 分析找出链表的中间结点,将中间结点以后的结点逆置,比较原链表和逆置后的链表即可得出结果 struct ListNode* slow=head; struct ListNode* fast=h 阅读全文
posted @ 2021-05-22 21:44 偶遇的 阅读(212) 评论(0) 推荐(0)
摘要: 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 受哨兵结点启发,新建两个伪头,然后将比较结果分别后插到两个链表中,最后将第二个链表后插到第一个链表,需要注意的是 阅读全文
posted @ 2021-05-21 10:22 偶遇的 阅读(41) 评论(0) 推荐(0)
摘要: 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 首先考虑将两个链表的第一个元素比较拿到新链表的头结点,作为新链表的头,然后将两个链表逐个比较取较小结点放在新链表的后面,直至有链表出现NULL。 学习单链表的时候写头插尾插头删尾删都可以顺利写出,没想到单链表的题目比较刁钻, 阅读全文
posted @ 2021-05-20 20:51 偶遇的 阅读(113) 评论(0) 推荐(0)
摘要: 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后新数组的长度。不要使用额外的数组空间。 分析题目和上一个有点类似,考虑用双重下标的方法重组数组。 #include <stdio.h> int removeDuplicates(int* nums,int numsS 阅读全文
posted @ 2021-05-14 19:40 偶遇的 阅读(127) 评论(0) 推荐(0)
摘要: 分析可以遍历数组的同时,如果发现目标元素忽略,不是目标元素直接将该元素下标置0,依次达到覆盖所有目标元素的目的。 #include <stdio.h> int removeElement(int* nums,int numsSize,int val) { int i; int n=0; for(i= 阅读全文
posted @ 2021-05-14 15:28 偶遇的 阅读(147) 评论(0) 推荐(0)
摘要: 给定一个整型数组nums,其中恰好有两个元素出现一次,其余元素都出现两次,找出只出现一次的那两个元素。 分析有道类似的题目是只有一个元素出现一次,那么利用异或的特性,相同数字异或为0,异或结果不受顺序影响,将所有元素异或在一起最终结果就是只出现一次的元素。本题改成了两个元素未重复,如果将所有元素异或 阅读全文
posted @ 2021-05-13 19:48 偶遇的 阅读(64) 评论(0) 推荐(0)
摘要: 数组arr包含从0到n的所有整数,但是其中缺少了一个,请编写代码找出缺失的那个整数。要求时间复杂度O(N) 从0到n应该有n+1个数字,缺少一个那么该数组元素个数为n。 思考1: 假如将该数组元素全部相加所得到的和,与正常不缺少该数字的数组之和相减,那么得到的数字就是缺少的数字。 假设该数组为arr 阅读全文
posted @ 2021-05-13 10:28 偶遇的 阅读(129) 评论(0) 推荐(0)