题目描述输入一个链表,输出该链表中倒数第k个结点。分析:此题为常见的快慢指针问题,java实现时要注意空指针错误以及边界条件。使用两个指针p和q,一个指针先走k-1步,然后第二个指针开始走。当第一个指针指向单链表的最后一个节点时,第二个指针指向倒数第k个节点。代码如下: 1 /* 2 public ...
分类:
其他好文 时间:
2015-08-28 00:44:23
阅读次数:
124
题目
1、判断一个单链表是否带环
2、求取一个带环单链表的环的长度
3、求取一个带环单链表的环的入口
4、判断两个不带环单链表是否相交
5、求取两个不带环单链表的一个公共节点
这仅仅一个单链表是否带环可以拓展出这么多的问题,我们来一个一个解决
1、判断一个单链表是否带环。
思路
记得以前做过这个,可以用快慢指针,两个指针同时指向头结点,快指针一次走两个,慢指针一次走一个,...
分类:
其他好文 时间:
2015-08-19 00:39:18
阅读次数:
202
题目
输入两个链表,找出他们的第一个公共节点。下面第一个公共节点便是40。
1->2->3----- >40->50
10->20->30----/
思路
看到栈就忽然恍然大悟,然后在看到类似快慢指针,更大悟。
思路一:
分别遍历第一条链表和第二条链表,将其每个节点分别存入两个栈,然后依次出栈,最后一个相同的的栈...
分类:
其他好文 时间:
2015-08-18 12:07:57
阅读次数:
119
快慢指针到底指向哪?这个问题对于刚接触这种技巧的人来说往往把握不好.下面将以单链表为例, 说一点我个人的理解.
1) 比较通用的写法
if (head == NULL || head->next == NULL)
return true;
ListNode *fast = head, *slow = head, *prev = NULL;
while (fas...
分类:
其他好文 时间:
2015-08-03 01:19:05
阅读次数:
171
快慢指针算法描述定义两个指针slow, fast。slow指针一次走1个结点,fast指针一次走2个结点。如果链表中有环,那么慢指针一次会再某一个时刻追上快指针(slow == fast)。如果没有环,则快指针会第一个走到NULL。实现结点定义如下:class Node {
public Node next;
public Object data; public static...
分类:
其他好文 时间:
2015-08-01 14:20:14
阅读次数:
141
如何检测一个链表是否有环?这个是一个出现频率较高的面试题。
??如下是一个含有环的链表。
(图片来自http://www.nowamagic.net/librarys/veda/detail/2245
一个有很多关于数据结构的文章的网站,还有其他的资料,可以看看)
我这里解题的方法有三种:
快慢指针方法:两个速度不一样的指针遍历总会相遇;
利用环的顶点数和边相等的关系;
两个指针遍历判断...
分类:
编程语言 时间:
2015-07-20 12:57:24
阅读次数:
242
Given a singly linked list, determine if it is a palindrome.思路: 用快慢指针找到链表中点,反转后半部分链表,然后与前半部分进行匹配,随后将链表恢复原状(本题没有这个要求,具体情况具体对待)。C++: 1 /** 2 * Definit.....
分类:
其他好文 时间:
2015-07-12 15:30:00
阅读次数:
100
Write an algorithm to determine if a number is "happy".
A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares...
分类:
移动开发 时间:
2015-07-12 09:44:45
阅读次数:
117
Given a linked list, determine if it has a cycle in it.Follow up:Can you solve it without using extra space?Hide TagsLinked ListTwo Pointers分析:经典的快慢指针...
分类:
其他好文 时间:
2015-06-23 17:44:18
阅读次数:
99
Sort a linked list in O(n log n)
time using constant space complexity.
算法一 自顶向下折半归并,递归
使用递归。进行折半。
先使用快慢指针,找到中间结点。将链表一分为二。
对此两链表进行递归排序后,进行归并。
在leetcode上实际执行时间为62ms。
/**
* Definition for...
分类:
其他好文 时间:
2015-06-08 09:57:20
阅读次数:
118