笔试题汇总
链表反转
单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题。比如一个链表是
这样的: 通过反转后成为 。
最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个
元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。源代码如下:
! "##$%&&
' ((((((((((((((((((
) *++
, *#
- #
.
((#
((#*
((*#
! ((#
'
) #$%&&
, #*
-
还有一种利用递归的方法。这种方法的基本思想是在反转当前节点之前先调用递归函数反转后
续节点。源代码如下。不过这个方法有一个缺点,就是在反转后的最后一个结点会形成一个环,
所以必须将函数的返回的节点的 域置为 $%&&。因为要改变 指针,所以我用了引用。
算法的源代码如下:
*+
"*##$%&&//*##$%&&
1