- 博客(11)
- 收藏
- 关注
原创 二进制链表转整数
给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。 请你返回该链表所表示数字的 十进制值 。 示例 1: 输入:head = [1,0,1] 输出:5 解释:二进制数 (101) 转化为十进制数 (5) 示例 2: 输入:head = [0] 输出:0 示例 3: 输入:head = [1] 输出:1 示例 4: 输入:head = [1,0,0,1,0,0,1,1,1,0,0,0,0,0,0] 输出:18880 示例 5: 输入:head
2020-07-16 01:06:15
186
原创 相交链表
编写一个程序,找到两个单链表相交的起始节点。 解法1 – set容器 空间复杂度 O(N) /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *getIntersect
2020-07-15 02:39:42
119
原创 回文链表
编写一个函数,检查输入的链表是否是回文的。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 解法 1、通过快慢指针找到中间结点 2、通过头插法将链表前半段反转 3、最后比较 /** * Definition for singly-linked list. * struct ListNode { * int val; * Lis
2020-07-15 01:07:01
143
原创 从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 10000 解法1 栈 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} *
2020-07-14 16:41:03
98
原创 删除中间节点
实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。 示例: 输入:单向链表a->b->c->d->e->f中的节点c 结果:不返回任何数据,但该链表变为a->b->d->e->f /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode
2020-07-14 15:23:27
254
原创 删除链表 M 个节点之后的 N 个节点
给定链表 head 和两个整数 m 和 n. 遍历该链表并按照如下方式删除节点: 1、开始时以头节点作为当前节点. 2、保留以当前节点开始的前 m 个节点. 3、删除接下来的 n 个节点. 4、重复步骤 2 和 3, 直到到达链表结尾. 5、在删除了指定结点之后, 返回修改过后的链表的头节点. 进阶问题: 你能通过就地修改链表的方式解决这个问题吗? 示例 1: 输入: head = [1,2,3,4,5,6,7,8,9,10,11,12,13], m = 2, n = 3 输出: [1,2,6,7,11,
2020-07-14 15:10:20
1418
1
原创 返回倒数第k个节点
面试题 02.02. 返回倒数第 k 个节点 实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。 注意:本题相对原题稍作改动 示例: 输入: 1->2->3->4->5 和 k = 2 输出: 4 说明: 给定的 k 保证是有效的。 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(in
2020-07-14 13:29:42
112
原创 链表相交
面试题 02.07. 链表相交 给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 输出:Reference of the node with value = 8 输入解释
2020-07-13 15:40:41
125
原创 线性表
一、线性表基本操作如下: 1、线性表的置空操作clear():将一个已经存在的线性表置为空表。 2、线性表判空操作isEmpty():判断线性表是否为空,若为空,则返回true;否则,返回为false。 3、求线性表的长度操作length():求线性表中的数据元素的个数并返回其值。 4、取元素操作get(i):读取并返回线性表中的第i个数据元素的值。其中i的取值范围为0≤i≤length()-1。 5、插入操作insert(i,x):在线性表的第i个数据元素之前插入一个值为x的数据元素。其中i的取值范围为0
2020-07-12 01:38:11
4187
原创 leetcode两数相加
两数相加 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 解法1 具体步骤: 1、获取两个链表所对应的长度 2、在较短
2020-07-11 23:14:33
123
原创 leetcode两数之和
leetcode两数之和 暴力解法 class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int>ans; for(int i=0;i<nums.size();i++){ for(int j=i;j<nums.size();j++){ if(nums[i]+nums[j]==target
2020-07-11 11:57:33
154
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人