返回
内卷大厂三连击:揭秘链表反转之奥义
后端
2023-10-15 01:57:58
1. 链表反转的基本思路
链表反转的核心思想是将链表中每个节点的指针指向发生改变,从而达到反转链表的目的。具体来说,需要做的步骤如下:
- 首先,定义两个指针变量:
pre
和cur
,其中pre
指向当前节点的前一个节点,cur
指向当前节点。 - 初始化
pre
为null
,cur
为链表头节点。 - 进入循环,每次循环将
cur
指向的当前节点的下一个节点赋值给pre
,再将cur
指向pre
,最后将cur
指向当前节点的下一个节点。 - 重复以上步骤,直到
cur
为null
,此时链表已经反转完成。
通过上述步骤,可以实现链表的反转。需要注意的是,在循环过程中,需要保证pre
和cur
始终指向相邻的两个节点,否则链表将无法正确反转。
2. 三种常见的链表反转算法
2.1 头插法
头插法是一种简单有效的链表反转算法。其核心思想是将每个节点从链表尾部取下,然后插入到链表头部,以此类推,直到所有节点都插入到链表头部,此时链表就反转完成了。
头插法的实现步骤如下:
- 首先,定义两个指针变量:
head
和cur
,其中head
指向链表头节点,cur
指向当前节点。 - 初始化
cur
为链表头节点。 - 进入循环,每次循环将
cur
指向的当前节点的下一个节点赋值给head
,再将cur
指向head
,最后将head
指向当前节点。 - 重复以上步骤,直到
cur
为null
,此时链表已经反转完成。
2.2 尾插法
尾插法与头插法类似,但其核心思想是将每个节点从链表头部取下,然后插入到链表尾部,以此类推,直到所有节点都插入到链表尾部,此时链表就反转完成了。
尾插法的实现步骤如下:
- 首先,定义三个指针变量:
head
、cur
和tail
,其中head
指向链表头节点,cur
指向当前节点,tail
指向链表尾节点。 - 初始化
cur
为链表头节点,tail
为链表尾节点。 - 进入循环,每次循环将
cur
指向的当前节点的下一个节点赋值给tail
,再将cur
指向tail
,最后将tail
指向当前节点。 - 重复以上步骤,直到
cur
为null
,此时链表已经反转完成。
2.3 迭代法
迭代法是另一种常见的链表反转算法。其核心思想是利用一个栈来存储链表中的节点,然后逐个弹出栈中的节点并将其插入到链表头部,以此类推,直到栈中没有节点,此时链表就反转完成了。
迭代法的实现步骤如下:
- 首先,定义一个栈,并将其初始化为空。
- 然后,定义两个指针变量:
head
和cur
,其中head
指向链表头节点,cur
指向当前节点。 - 进入循环,每次循环将
cur
指向的当前节点入栈,再将cur
指向cur
的下一个节点。 - 重复以上步骤,直到
cur
为null
,此时栈中已经包含了链表中的所有节点。 - 将栈中的节点逐个弹出并插入到链表头部,以此类推,直到栈中没有节点,此时链表已经反转完成。
3. 结语
链表反转是大厂面试中高频出现的问题,也是检验程序员基本功的试金石。通过本文的学习,相信大家已经掌握了链表反转的基本原理和三种常见的反转算法。在实际面试中,可以根据面试官的要求选择合适