力扣206.反转链表(java)

本文介绍力扣206题“反转链表”的两种解决方法:迭代和递归。通过双指针迭代的方式实现节点的两两交换,并采用递归方法反转链表,提供完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

力扣206.反转链表


LeetCode笔记汇总

题目

在这里插入图片描述

思路

双指针迭代
迭代的思想是从左边开始两两交换链表中的节点。交换两个节点,使用一个长度为3的滑动窗口。窗口中的元素分别为pre,cur,temp。实际交换的是前两个节点,第三个temp节点主要用于存储,避免在改变cur.next后访问不到原链表中cur后面的元素。最开始时让pre指向null,从而达到将第一个节点的next置空的目的,否则将始终指向原链表的第二个元素。每次交换之后让三个指针后移一位即可,直至cur指针为空。
递归
在这里插入图片描述

代码

//迭代
class Solution {
	public ListNode reverseList(ListNode head) {
		ListNode pre = null;
		ListNode cur = head;
		ListNode tmp = null;
		while(cur != null) {
			tmp = cur.next;
			cur.next = pre;
			pre = cur;
			cur = tmp;
		}
		return pre;
	}
}
//递归
class Solution {
    public ListNode reverseList(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        ListNode newHead = reverseList(head.next);
        head.next.next = head;
        head.next = null;
        return newHead;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值