采用归并排序,通过定义快、慢两个指针来找到中点,再采用之前的排序算法进行归并。 ListNode *listSort(ListNode *head) { //定义快慢指针,找到链表中心 ListNode *slow=head,*fast=head; while (fast->next!=nullpt ...
分类:
其他好文 时间:
2016-07-12 17:36:19
阅读次数:
129
给出一个链表,先判断链表是否带环,如果带环,求出环的入口。
判断是否带环:用快慢指针。快指针每走两步,慢指针走一步,如果两者在某个点处相
遇,则链表带环。
下边给出函数的实现代码:
typedef struct LinkNode
{
DataType data;
struct LinkNode *next;
}LinkNode,*pLinkNode;
typedef struct Li...
分类:
其他好文 时间:
2016-06-24 15:02:35
阅读次数:
134
1、判断有环 一个链表如果没有环,那么一直next,最终会得到null。若有环则一定不会为null。通过这个思想,可以把每次遍历的链表元素保存到一个list中,每次判断是否包含在这个链表中或者是否为空。这无疑是一个可行的办法,但是需要消耗的控件会变大。还有一个经典的办法解决这个问题,那就是快慢指针。 ...
分类:
其他好文 时间:
2016-06-16 13:20:06
阅读次数:
217
1、链表中是否有环 如果链表中存在环的话,则遍历链表时无法通过观察指针是否为null来判断链表是否结束。 判断链表中是否存在环,需要引入快慢指针(slow 和 fast),slow每次走一步,fast每次走两步, 如果slow和fast会相遇,则说明链表中存在环,否则不存在。 2、链表中环的入口结点 ...
分类:
其他好文 时间:
2016-05-27 16:33:02
阅读次数:
147
两个思路,一是用哈希表记录每个结点是还被访问过;二是定义两个快、慢指针,如果存在环的话,两个指针必定会在某位结点相遇。 bool linkListNode(ListNode *head) { ListNode *fast=head, *slow=head; while (fast && fast-> ...
分类:
其他好文 时间:
2016-05-21 17:16:15
阅读次数:
130
有一个链表,怎样快速获取中间节点的元素。 方法1 遍历一下链表,确认长度,获取中间的节点元素,时间复杂度O(N) 方法2 设置两个指针,一个遍历p->nexr 一个 p->next->next,快慢指针的思想 时间复杂度为O(n/2) 代码: ...
分类:
其他好文 时间:
2016-05-15 02:09:19
阅读次数:
229
比较直观的解法是自顶向下的递归解决,先找到中间节点作为根节点,然后递归左右两部分。所有我们需要先找到中间节点,对于单链表来说,必须要遍历一边,可以使用快慢指针加快查找速度。
代码如下:
但是leetcode中没有编译通过,因为java二叉树中引用为null的节点中值为'#';/**
* Definition for singly-linked list.
* public clas...
分类:
其他好文 时间:
2016-05-12 22:39:42
阅读次数:
157
判断链表是否有环方法——快慢指针
一、 问:如何判断是否有环?
答:如果有两个头结点指针,一个走的快,一个走的慢,那么若干步以后,快的指针总会超过慢的指针一圈。
设置两个指针(fast,slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表)。...
分类:
其他好文 时间:
2016-05-12 22:04:47
阅读次数:
175
题目来源: https://leetcode.com/problems/linked-list-cycle-ii/ 题意分析: 给定一个链表,如果链表有环,返回环的起始位置,否则返回NULL。要求常量空间复杂度。 题目思路: 首先可以用快慢指针链表是否有环。假设链表头部到环起点的距离为n,环的长度为 ...
分类:
编程语言 时间:
2016-05-09 18:26:56
阅读次数:
148
思路:第一时间想到的肯定是通过添加计数器解决这个问题,但是问题产生了,链表具有单向性,统计总数,还是计算当前数目都在效率上面很吃亏。 借用快慢指针的思想。可以安排两个同速指针,但是他们存在先后顺序,就可以解决这个问题。 ...
分类:
其他好文 时间:
2016-04-23 10:11:28
阅读次数:
178