题解|链表逆序(Java)
迭代法
假设有一个链表,其头节点为head
,我们希望将这个链表反转。我们可以通过迭代的方式,从头节点开始依次反转每一个节点。
具体实现方式如下:
- 定义两个指针cur和prev,初始时一个指向头节点head,一个指向空。
2. 进入while循环,对当前节点进行反转操作:
a. 记录下一个节点的指针,即cur的下一个节点,用next表示。
b. 将当前节点的指针指向前一个节点prev,即cur.next = prev。
c. 将指针向后移动一个节点,继续进行下一次反转:
将prev指向cur,即prev = cur。
将cur指向下一个节点next,即cur = next。
3.当cur指向空节点时,说明反转完成,返回指向反转后链表的头节点的指针prev。
递归法
假设有一个链表,其头节点为head
,我们希望将这个链表反转。我们可以通过递归的方式,从尾节点开始逐个反转每一个节点。
具体实现方式如下:
- 假设当前递归到了链表的尾部节点,返回该节点。
- 从当前节点的下一个节点开始,递归调用反转函数,得到反转后的新节点。
- 将当前节点的指针指向新节点的下一个节点,即head.next.next = head。
- 将新节点的指针指向空节点,即head.next = null。
- 返回新节点。
栈法
假设有一个链表,其头节点为head
,我们希望将这个链表反转。我们可以通过借助栈的先进后出的特性,将链表中的节点逐个压入栈中,然后从栈中逐个弹出节点,重新连接成一个新的反转后的链表。
具体实现方式如下:
- 定义一个栈,用来存放链表中的节点。
- 从头节点开始,依次遍历链表中的每个节点,将每个节点压入栈中。
- 弹出栈顶元素,将其连接到反转后链表的尾部。
- 重复步骤3,直到栈为空。
- 返回反转后链表的头节点。