链表中没环就返回NULL
有就返回环的入口
三种基本思路:
1、快慢指针找到环内的一个node,然后从链表头开始,对于每一个node,看它在不在环中
2、用map存一下访问过的节点地址,看当前node的地址是否在map中
3、其实,经过计算,对于1中,快慢指针相遇的地方,再开始以慢指针开始走,
另一方面,在链表的头部也用一个慢指针开始走,二者相遇的地方便是环的入口
(代码并未...
分类:
其他好文 时间:
2015-06-04 21:11:15
阅读次数:
170
针对leetcode上面的20多个链表的算法题,总结了一下链表操作中的几个技巧。 1. 快慢指针 快慢指针是在遍历链表的时候使用两个指针,快指针每次比慢指针多跑一步或多步,或者快指针先跑n步。这在查找倒数第n个结点、找中间结点时只需要遍历一次,在判断链表是否有环时不需要额外的空间。例如,查找一个链表...
分类:
其他好文 时间:
2015-05-29 13:37:30
阅读次数:
135
//找链表的中间结点/*已知单链表L,编写算法找出该链表的中间位置的结点。思考:1、一种想法就是从头遍历到尾部,记录长度。随后再次遍历一次,直到长度的二分之一即找到。时间复杂度为O(3n/2)2、另一种想法:设置快慢指针,快指针一次走两步,慢指针一次走一步,当快指针走到NULL的时候,慢指针的位置就...
分类:
其他好文 时间:
2015-05-29 07:26:28
阅读次数:
223
Title:思路:使用快慢指针,当快指针指向链表尾部时,将慢指针所指即以后反转,再将前后两个链表合并class Solution {public: void reorderList(ListNode* head) { ListNode*fast = head; Li...
分类:
其他好文 时间:
2015-05-24 14:07:34
阅读次数:
81
//利用快慢指针快速得到链表中间节点int getMiddleNodeValue(LIST * l) { NODE * search, * middle; search = l->head; middle = l->head; while (NULL != searc...
分类:
其他好文 时间:
2015-05-18 12:40:17
阅读次数:
175
思路:定义两个快慢指针,快指针一次走两步,慢指针一次走一步,当快指针到达尾结点时,慢指针刚好为中间结点,这里需要区分两种情况,当链表中结点数为奇数时,慢指针刚好到达中间结点;当链表中结点数为偶数时候,中间结点有两个,返回一个。public static ListNote findMidNode(ListNote headNote){
if(headNote==null){...
分类:
其他好文 时间:
2015-05-17 12:21:54
阅读次数:
118
链表找环最经典的就是快慢指针。而今天的主角也是它了。快慢指针的思路就是,同时起跑的乌龟和兔子,若赛道无环,则永不相遇,反之则会相遇。那么我们假定兔子速度是乌龟的2倍。乌龟和兔子在环中某点相遇,有以下等式:2*x=x+n*k 其中x是乌龟走过的路程,n是兔子绕的圈数,k是圈长。等式变换 x=n*k,理...
分类:
编程语言 时间:
2015-05-07 00:30:45
阅读次数:
134
problem:
Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
Hide Tags
Linked List Two
Pointers
...
分类:
其他好文 时间:
2015-05-04 12:05:09
阅读次数:
148
判定的方法比较简单 有两种方法
第一种是使用哈希表来存贮每一个节点 这样的话 当hashset[ ] 中出现两个相同的节点时就可以判断出来这是一样的了 然后他所在的那个位置就是环第一次出现的位置上
第二种方法是用两个快慢指针来做
设定两个指针分别为p1 p2 , p1的移动速度为每次移动一个距离 ,而p2的移动速度为每次移动两个距离 ,这样 ,直到快指针到达链...
分类:
其他好文 时间:
2015-04-30 20:10:36
阅读次数:
126
leet code Sort Listleet code Sort List对链表使用快慢指针归并排序Sort ListSort a linked list in O(n log n) time using constant space complexity./** * Definition for...
分类:
其他好文 时间:
2015-04-22 22:12:40
阅读次数:
123