说明:本文仅供学习交流。转载请标明出处。欢迎转载!
题目:存在一个单链表,头指针为head,实现单链表的反转Node *Reverse(Node *head)。
该算法的求解办法有非常多,如:
方法1:先顺序变量单链表,将结点保存到栈中,在从栈中弹出结点,又一次建立一个新的单链表;
方法2:用《剑指offer》里面给出的算法,用三个指针来实现;
方法3:採用递归实现,是方法2的递归实现形式。
本文主要给出方法2和方法3。在给出详细的代码之前,先要注意几个问题:
(1)假设head为空,该怎样处理?
(2)假设链表为单节点链表,该怎样处理?
(3)怎样防止在反转过程中断链?
(4)反转后head是否更新?
(5)反转后得到的链表最后一个结点是否为null?
考虑完以上问题后,就能够写出正确的代码了。
代码实现例如以下:
測试结果例如以下:
參考资料-------------《剑指offer》