算法-LeetCode
if_i_were_a
你好
展开
-
LeetCode 21合并两个有序链表
LeetCode第21题,也是剑指offer上的一个题,题目描述如下:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4 public static ListNode mergeTwoList...原创 2019-04-10 10:55:30 · 132 阅读 · 0 评论 -
求数组中只出现一次的数字
题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 public static void main(String[] args) { int[] nums = {7, 6, 7, 5}; int[] nums1 = {0}; int[] nums2 = {0}; Find...原创 2019-07-16 15:26:58 · 633 阅读 · 0 评论 -
LeetCode142给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
这是LeetCode上面的142题,同时也是剑指offer上的一个题整体思想:当判断完当前链表有环之后,先确定环的个数,确定完之后,让前面的指针开始先跑n个节点,然后两支针一起跑,两个指针相等的那个位置就是环形链表的入口节点代码如下: public static ListNode detectCycle(ListNode head) { if (head == n...原创 2019-04-09 17:05:56 · 2408 阅读 · 0 评论 -
LeetCode 141判断链表是否有环[附创建链表的代码]
LeetCode上面的141题,同时也是昨晚携程笔试编程的第1题。当时那个函数很快就写出来了,但是在创建环形链表这儿一直绕不出来,花了很长时间。下来跟大家讨论才知道有的人有HashMap解决了,HashSet也有的解决了,还有的直接用一个char数组给解决了。还是把自己的方法整理一下思路就是两个指针,一个每次向前跑两个,一个向前跑一个,如果在某一个时间点,两者重复了,就说明是环形链表函...原创 2019-04-09 09:55:37 · 293 阅读 · 0 评论 -
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
本题是LeetCode第19题,以后题目也可能会变。本题的描述如下:示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.思路:用两个节点,删除让前一个节点比后一个节点先跑n次,然后两个一起跑。当前一个节点遍历结束或者为空的时候,后一个节点是要删除的元素,但是要删除一...原创 2019-04-09 08:41:48 · 3227 阅读 · 4 评论 -
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
分割链表:题目如下:给定一个链表和一个特定值x,对链表进行分隔,使得所有小于x的节点都在大于或等于x的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5这个题是LeetCode第86...原创 2019-04-08 18:04:48 · 3686 阅读 · 1 评论 -
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
与这个题相似的有一道题,保留原始链表中重复数字出现一次博客地址:https://blog.csdn.net/if_i_were_a/article/details/89092123本题的题目描述:(本题是LeetCode第82题)给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。示例1:输入: 1->2->3->3-&g...原创 2019-04-08 16:23:03 · 4128 阅读 · 0 评论 -
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
题目描述:给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。LeetCode的83题,以后题目的序号有可能会改变示例1:输入: 1->1->2输出: 1->2示例2:输入: 1->1->2->3->3输出: 1->2->3代码如下:public ListNode...原创 2019-04-08 15:51:46 · 3670 阅读 · 0 评论 -
删除链表一个结点时间复杂度为O(1)
/*剑指offer p119 面试题18在O(1)时间内删除链表结点 */#include<stdio.h>#include<malloc.h>typedef struct node{ int data; struct node *next;} LinkNode;LinkNode * createLinkList(){ LinkN...原创 2018-09-08 15:57:49 · 1873 阅读 · 0 评论 -
链表的反转(逆置)
剑指offer面试题24 p142LeetCode第204题本题有两种解法,迭代法和递归法:迭代法比价好理解:代码如下:,要注意的是必须用一个tempHead来记录当前操作的下一个结点 //使用迭代的方法反转链表 public static ListNode reverseList(ListNode head) { ListNode pre=null;...原创 2019-04-07 13:21:26 · 663 阅读 · 0 评论 -
删除链表中的值为某个给定节点的值[带表头结点和不带表头结点及两种递归方法]
这个题是一个关于链表的基础题,也是LeetCode中的一个题(现在是203题,以后可能题号会变)虽然这个题比较基础,但是还是有很多坑。请看代码:/** * 不带表头结点的链表的删除 * @param head 传进来的链表的头指针 * @param val 要删除的值 * @return */ public ListNode ...原创 2019-04-06 22:20:39 · 1186 阅读 · 0 评论 -
LeetCode 160找到两个单链表相交的起始结点
编写一个程序,找到两个单链表相交的起始节点。LeetCode160题,剑指offer上的题 public static ListNode getIntersectionNode(ListNode headA, ListNode headB) { if (headA == null || headB == null) return null; ...原创 2019-04-10 18:43:30 · 312 阅读 · 2 评论 -
找出数组中和为给定值的方法
这个题某次面试中面试官问到了,在LeetCode上也有题目描述:给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[...原创 2019-04-05 11:41:48 · 2775 阅读 · 0 评论 -
复杂链表的复制
题目如下:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)两种方法,在代码中已标识清楚,在牛客网上均通过关于第一种方法详细请看https://blog.csdn.net/wszy1301/article/details/8...原创 2019-07-18 20:19:27 · 637 阅读 · 0 评论