剑指Offer-数据结构 剑指 Offer 24. 反转链表
Q:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000
这个题目在《C和指针》的学习部分已经详细分析了,请参考:《高频面试考点:反序排列单链表》,分析了4中不同的算法思路。
这里简单回顾下:
1、直接反转法:就是每次把还未移动的节点从原来的位置放到最前面。
2、迭代反转法:就是利用3个指针prev, current, next辅助,逐个改变原链表的指针指向。
3、新链表头插法:这个思路最简单,构建一个新的链表,每次取一个原链表的节点插入到新链表的头部。
4、递归反转法:利用递归的出栈,从链表的尾部向前遍历,依次改变每个节点的指向,指向前一个节点。
小结:只要对链表熟悉了,这个题目应该比较容易快速给出解答。这个是面试的一个高频考点,需要非常熟练。