一、题目
给你单链表的头节点 head
,请反转链表,并在反转后返回链表。
2.2> 示例 2:【输入】head = [1,2,3,4,5][输出][5,4,3,2
2.3> 示例 3:【输入】head = [1,2][输出][2,1]
提示:【输入】head = [][][输出][][][]
- 链表中节点的数量范围是
[0, 5000]
-5000
<= Node.val <=5000
对于链表反转操作,我们可以首先选择迭代转换,即每当我们通过两个节点时,我们都可以执行next指针反转前端节点。这里需要注意的是,因为我们需要修改它next指针
,因此,在遍历时,我们应该首先缓存next指针指向的原始对象,然后更改next指针。这样做的目的是继续实施遍历操作。具体操作方法见下图所示:
根据主题描述,我们需要翻转原链表。然后,由于单向链表的单向性,如果我们想翻转链表,我们可以通过递归处理。具体逻辑如下:
四、代码实现4.1> 实现1:迭代方式【步骤1】每次递归都要
head.next
以节点为方法传输入参。[步骤2]当输入时这个节点是null
或者它的nulllll
,然后直接返回节点。[步骤3]当遍历最后一节点
两个节点之间可以进行时间链表反转
操作了。
class Solution { public ListNode reverseList(ListNode head) { ListNode pre = null, temp = null; while (head != null) { temp = head.next; head.next = pre; pre = head; head = temp; } return pre; }}
4.2> 实现2:递归方式class Solution { public ListNode reverseList(ListNode head) { if (head == null || head.next == null) return head; ListNode node = reverseList(head.next); head.next.next = head; head.next = null; return node; }}
以下是今天文章的内容:
写作并不容易。作者几个小时甚至几天就完成了一篇文章。我只想换取你几秒钟 点赞 & 分享 。
更多技术干货,欢迎关注微信官方账号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」