
c
文章平均质量分 50
fengasdfgh
这个作者很懒,什么都没留下…
展开
-
链表问题:如何反转链表?
在面试中,被问到有关链表的问题是很多的。如题,本文就是其中一个。一共有三种思路:循环与递归,还有一种是头插:循环的思想是用三个节点指针来进行反转,如图: 有了思路之后,代码如下:struct ListNode { int _value; struct ListNode *_next; }// ListNode* reverseList(ListNode* pHead)原创 2016-10-23 10:26:31 · 377 阅读 · 0 评论 -
栈的弹出序列是否与压入序列匹配?
我的同学问了我这样一道题: 输入两个序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设序列1,2,3,4,5是某栈的压入序列,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。这里必须假设2个序列的长度一样,并且不可能出现重复字符(不然的话会变得复杂,没有必要这么做)这种题目的方法也是很多的,你可以模拟栈的压入压出,原创 2016-10-23 11:02:11 · 633 阅读 · 0 评论 -
链表:找出两个链表的相交节点
这个问题我们现在只考虑是2个不带环链表相交,如图:那么我们如何找到这个节点d那? 我们可以定义2个头节点head1, head2,让它们同时走下去,如果head1 == head2的话,就说明找到了d点,然而很明显,这是假设list1与list2长度相同的情况下,所以我们需要先遍历一次2个链表,得出2个链表的长度length1,length2,让长的先走|length2-length1|原创 2016-10-24 00:34:42 · 1063 阅读 · 0 评论 -
如何找到带环链表的入口节点?
2种思路: 首先我们假设有个带环链表list1,如图我们可以这么做: 这样问题就转换成了如何求出2个不带环链表的相交节点很明显你会问如何在环中找到一个节点,你不可能去遍历(会死循环),有这样一个办法,我们设置一个快慢指针first,second,快指针一次走2个节点,慢指针一次走一个节点,那么它们最终在环内相遇。你会问:如果快指针每次都跳过慢指针那? 当然不会。 证明如下: 我们可以利原创 2016-10-24 02:07:43 · 2175 阅读 · 0 评论 -
不用加减乘除做加法的一些方法
在这里归纳了网上的办法,有些解释是复制粘贴的,如果原作者看到了,我在这里表示感谢。 第一种: 首先看十进制是如何做的: 5+7=12,三步走 第一步:相加各位的值,不算进位,得到2。 第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果。第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12。同样我们可以用三步走的方式计算二进制值相原创 2017-07-14 20:52:48 · 767 阅读 · 0 评论