
笔试算法&面试算法(Java版)
文章平均质量分 62
lavor_zl
这个作者很懒,什么都没留下…
展开
-
单链表就地逆置(Java版)
题目:有一个线性表(a1,a2,a3,...,an),采用带头节点的单链表L存储,设计一个算法将其就地逆置,线性表变为(an,...a3,a2,a1)。所谓“就地”指辅助存储空间为O(1)。解题思路:如果是顺序存储的话,我们很容易想到解题思路,利用1个辅助变量让第1个元素与第n个元素交换,然后再利用这个辅助变量让第2个元素与第n-1个元素交换,...最后利用这个辅助变量让第原创 2015-01-16 15:29:15 · 10612 阅读 · 0 评论 -
删除单链表中重复的值(Java版)
题目:删除带头结点的单链表中重复值的元素(即让每种值的元素只有一个)解题思路:用一个动态辅助存储数组,每次要向辅助数组中放入元素时,让辅助数组的长度加1,最长时与单链表一样长,设一个指针p,让它指向头结点,从单链表中第一个元素开始,将它的值放入辅助数组中,然后依次访问单链表后面的元素,用该元素的值与数组中所有已经被赋值的元素的值进行比较,如果不等于数组中任何元素的值,那么让p的原创 2015-01-17 09:31:17 · 4044 阅读 · 0 评论 -
单链表是否有环(Java版)
题目:判断一个带头结点的单链表L是否有环解题思路:咋看之下,这题还真不好解,于是又一些投机取巧的人,在访问单链表中元素的时候,用一个比较大的数N控制访问元素的个数,他们认为如果在访问到第N个元素之前有一个元素为null,那么单链表没有环,反之,单链表有环。他们的解释是都访问了这么多元素了,还没有一个元素为空,单链表很有可能有环,再加上一般单链表中的元素都不超过N个,所以单链表有环。对于原创 2015-01-16 21:29:06 · 5949 阅读 · 1 评论 -
删除单链表某个结点(Java版)
题目:删除带头结点的单链表L中的结点p,p不是最后一个结点,要求时间复杂度为O(1)。解题思路:如果不要求时间复杂度为O(1),我们可以找出p的前驱结点,然后很容易就删除p。现在要求时间复杂度为O(1),因为p不是最后一个结点,知道结点p我们可以删除p的后继结点,那么我们可以把p的后继结点元素的值赋给p结点元素的值。ADT定义://单链表的结点类class LNo原创 2015-01-17 09:47:59 · 11463 阅读 · 1 评论 -
单链表是否相交(Java版)
题目:有两个带头结点的单链表L1,L2,判断它们是否相交(它们中是否有相同的结点)解题思路:L1,L2中任何一个链表为空它们不相交因为单链表中可能有环,所以分3种情况讨论1、L1,L2中都没有环,那么可以通过判断它们中最后一个结点是否相同,来判断它们是否相交2、L1,L2中一个有环,一个没有环,那么它们一定不相交3、L1,L2中都有环,那么只有当它们的环相同时,它们才相原创 2015-01-16 21:42:17 · 1082 阅读 · 0 评论 -
输出单链表中倒数第k个结点(Java版)
题目:输入带头结点的单链表L,输出该单链表中倒数第k个结点。单链表的倒数第0个结点为该单链表的尾指针。要求只能遍历一次单链表。解题思路:如果不要求只能遍历一次单链表,我们可以先遍历一次单链表,求出它的结点的总个数n(包括头结点),所以单链表的结点是从倒数第n-1个到倒数第0个,然后再遍历一次单链表,遍历时访问的第n-k-1个结点就是该单链表中倒数第k个结点。现在要求只能遍历原创 2015-01-17 15:40:24 · 2929 阅读 · 0 评论