82. 删除排序链表中的重复元素 II(不保留重复的)
摘要:给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。链表为无头结点、单向、不循环。(由于涉及到结构体,所以写不了完整的测试代码,下面展示的代码为LeetCode中写的代码) //第一次尝试://方法一:迭代法,由于头结点处重复和其他地方重复的操作不一样,所以我们先设置一
阅读全文
147. 对链表进行插入排序
摘要:对链表进行插入排序。链表为无头结点、单向、不循环。(由于涉及到结构体,所以写不了完整的测试代码,下面展示的代码为LeetCode中写的代码) 1.插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。2.每次迭代中,插入排序只从输入数据中移除一个待排序的元素,从有序序列的最后
阅读全文
138. 复制带随机指针的链表
摘要:给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。链表为无头结点、单向、不循环。(由于涉及到结构体,所以写不了完整的测试代码,下面展示的代码为LeetCode中写的代码) //第一次尝试://方法:借助原链表的结构来形成新链表,具体看
阅读全文
142. 环形链表 II(找循环点)
摘要:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。表为无头结点、单向。(由于涉及到结构体,所以写不了完整的测试代码,下面展示的代码为LeetCode中写的代码) //第一次尝试://方法:图文解释: //当然,这个方法有点不好想,我们还可以这样做:(这里就不演示了) st
阅读全文
141. 环形链表
摘要:给定一个链表,判断链表中是否有环。考虑各种情况。表为无头结点、单向。(由于涉及到结构体,所以写不了完整的测试代码,下面展示的代码为LeetCode中写的代码) //第一次尝试://方法:快慢指针,设置两个指针fast、slow,两个指针都从链表头结点开始遍历,fast一次走两步,slow一次走一步,
阅读全文
160. 相交链表
摘要:编写一个程序,找到两个单链表相交的起始节点。考虑到各种情况。链表为无头结点、单向、不循环。(由于涉及到结构体,所以写不了完整的测试代码,下面展示的代码为LeetCode中写的代码) //第一次尝试://方法一:计数遍历,由于链表a、b长短不一,所以先遍历计数一遍,a的长度记为counta,b的长度记
阅读全文
234. 回文链表
摘要:对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。链表为无头结点、单向、不循环。(由于涉及到结构体,所以写不了完整的测试代码,下面展示的代码为LeetCo
阅读全文
面试题02.04.分割链表
摘要:现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。链表为无头结点、单向、不循环。(由于涉及到结构体,所以写不了完整的测试代码,下面展示的代码为LeetCode中写的代码) //第一次
阅读全文
21. 合并两个有序链表
摘要:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 链表为无头结点、单向、不循环。(由于涉及到结构体,所以写不了完整的测试代码,下面展示的代码为LeetCode中写的代码) //第一次尝试://方法一:双指针法/迭代法,先创建一个虚头结点list,设置两个指
阅读全文
剑指Offer22.链表中倒数第k个节点
摘要:输入一个链表,输出该链表中倒数第k个结点。链表为无头结点、单向、不循环。(由于涉及到结构体,所以写不了完整的测试代码,下面展示的代码为LeetCode中写的代码) //第一次尝试://方法一:双循环,第一次循环计数,记为count;第二次循环找第count-k+1个节点;//方法二:双指针,创建两个
阅读全文
876.链表的中间结点
摘要:给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。链表为无头结点、单向、不循环。(由于涉及到结构体,所以写不了完整的测试代码,下面展示的代码为LeetCode中写的代码) //第一次尝试://方法一:做两次循环,第一次计数有多少个节点,记为cou
阅读全文
206. 反转链表
摘要:反转一个单链表。链表为无头结点、单向、不循环。(由于涉及到结构体,所以写不了完整的测试代码,下面展示的代码为LeetCode中写的代码) //第一次尝试: //本题我写了三种解题方法 //三种方法之外的方法:动态申请能装下链表数据的空间,然后将链表数据存放到数组中,在数组中将数据逆转,再存放到链表中
阅读全文
203.移除链表元素
摘要:删除链表中等于给定值 val 的所有节点。链表为无头结点、单向、不循环。(由于涉及到结构体,所以写不了完整的测试代码,下面展示的代码为LeetCode中写的代码) //第一次尝试://方法一:由于首元结点和非首元结点的删除不一样,所以情况讨论,如果要删除首元结点,只需先保留当前节点,然后将head指
阅读全文
989.数组形式的整数加法
摘要:对于非负整数X,有数组A是按照X从左到右每一位的顺序组成的数组,给定数组A,再给一个整数K,返回X+K的数组形式。 //第一次尝试://本题其实就是将数字中的元素拿出来依次排列组成一个整数,然后将这个整数和k相加,再将得到的结果一位一位放到数组中//但是由于数组的长度可能会很大,那么转换过来的数字将
阅读全文
189.旋转数组
摘要:给定一个数组,右旋k位,k为非负数,也就是将数组的后面k位,整体移动到数组前面。空间复杂度为O(1)。 //第一次尝试://本题若是没有空间复杂度的要求,那么我们可以使用一个取巧的办法,假设数组nums[]={1,2,3,4,5,6,7},不管右旋多少位,// 始终都是{1,2,3,4,5,6,7,
阅读全文
88.合并两个有序数组
摘要:两个有序数组nums1、nums2,数组元素个数为m、n,将nums2合并到nums1中,使nums1成为有序数组,假设nums1有足够的空间。 //第一次尝试://本题//第一种办法是将两个数组合并之后在进行排序,就好了;//第二种办法是设置两个标志位a、b,然后将a从nums1的首位开始,将b从
阅读全文
26.删除排序数组中的重复项
摘要:原地删除排序数组的重复项,返回移除后的数组长度。要求空间复杂度O(1)。 //第一次尝试://本题我认为和LeetCode-27.移除元素思想类似,这里我们也是使用双针指针的方法,设置两个标志flag、idx,一个计数位count,//最一开始让flag==nums[0],也就是数组首元素;idx从
阅读全文
27.移除元素
摘要:原地移除数组nums中所有等于val的元素,并返回数组的新长度,元素顺序可变,不需考虑数组中超出新长度后面的元素。要求空间复杂度为O(1)。 //第一次尝试://此问题使用了双指针的方法进行解决,size定位到等于val的位置,i用来向后遍历每一个元素,如果是val,则i++,如果不等于val,则将
阅读全文
剑指Offer56-I.数组中数字出现的次数
摘要:一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 //第一次尝试://在本题中,由于限制了时间复杂度为O(n),就不能使用双重循环做排序,然后遍历找单身数字;空间复杂度为O(1),就不能再申请n个空间
阅读全文
面试题17.04.消失的数字
摘要:数组nums包含从0到n的所有整数,但是其中缺了一个。请编写代码找出那个缺失的整数。要求:时间复杂度O(n)。 //第一次尝试: //方法一:思路是再开辟一个numsSize+1的数组arr,然后遍历nums,出现的数字在arr下标对应的位置设为-1,然后遍历arr,没有出现-1的,就是消失的数字
阅读全文