摘要: 链表很多题目还是应用穿针引线的方法。 这道题有两个关键之处: 1.要把tail->next = head 2.找到倒数 k % len + 1的节点,从而能访问到倒数k%len的节点。 阅读全文
posted @ 2018-09-04 23:02 ly-bnu 阅读(62) 评论(0) 推荐(0)
摘要: 这道题是merge two linked list的逆过程,即就是先要分成两个linked list,然后合并到一起即可。 阅读全文
posted @ 2018-09-04 21:29 ly-bnu 阅读(83) 评论(0) 推荐(0)
摘要: 这道题又是套路的一个特殊情况,具体代码如下: class Solution {public: ListNode* swapPairs(ListNode* head) { if (head == NULL || head->next == NULL) { return head; } ListNode 阅读全文
posted @ 2018-09-04 21:19 ly-bnu 阅读(73) 评论(0) 推荐(0)
摘要: 这道题和上面两道相比,是反转链表中更加普通的情况。 解决这道题需要两次循环,第一次求得长度,通过长度分段进行反转。第二次循环分段进行反转,分段反转就是Reverse Linked List II的情况了。 在第二次循环中有两个循环,一个是外层循环,一个是内层循环。内层的逻辑和之前的代码完全一致。外层 阅读全文
posted @ 2018-09-04 21:09 ly-bnu 阅读(89) 评论(0) 推荐(0)
摘要: 这道题和Reverse Linked List差不多,就是差一个范围。如果搞明白了那个套路,这道题还是非常简单的,具体代码如下所示: 阅读全文
posted @ 2018-09-04 20:57 ly-bnu 阅读(81) 评论(0) 推荐(0)
摘要: 我们先从该套路的一个最简单的情况说起,也就是206. Reverse Linked List。它是该套路的一个最简单的的情况,怎么个简单法呢?只需要一个循环即可解决问题。 那具体是怎么解决的呢? 假设虚拟头结点对应的值为-1,我们要反转的链表为1->2->3->4。连接起来即就是-1->1->2-> 阅读全文
posted @ 2018-09-04 20:47 ly-bnu 阅读(185) 评论(0) 推荐(0)
摘要: 这道题相比Reverse Linked List,结果如下图所示,其实我们不需要再做太多的工作,只需要改变两个指针指向即可。 所以需要在循环之前,保存这两个指针,然后指向正确的位置即可。 另外,要注意的点是index是从1开始的。 阅读全文
posted @ 2018-09-02 09:24 ly-bnu 阅读(63) 评论(0) 推荐(0)
摘要: 链表反转是非常经典的题目。包括cur(current)和prev比较容易理解。为什么需要next,如果直接cur->next = prev,就会造成断链。 循环体三步操作是: 1. cur->next = prev; 2. prev = cur; 3. cur = next; 阅读全文
posted @ 2018-09-01 22:16 ly-bnu 阅读(98) 评论(0) 推荐(0)
摘要: 对于点来说,分三种情况: 1.普通点:具有斜率。 2.垂直于X轴的点:斜率无穷大。 3.坐标相同的点。 我们将1和2分别进行讨论,然后和3的个数分别相加,求出较大者,即为对于一个点来说,和它共线的最多的点的个数。 再通过循环得出最大值即可。 阅读全文
posted @ 2018-09-01 01:15 ly-bnu 阅读(120) 评论(0) 推荐(0)
摘要: 又是一道查找表的题目,题目的思路是二重循环求每个点和其它点的距离,将距离作为map的key,如果距离相同则对value+1。 我们需要对每个点求出boomerangs,然后进行累加得到结果。 阅读全文
posted @ 2018-08-31 14:30 ly-bnu 阅读(95) 评论(0) 推荐(0)