第二章 链表_206. 反转链表

这篇具有很好参考价值的文章主要介绍了第二章 链表_206. 反转链表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


206. 反转链表

一、题目

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

二、遇到的问题

1. 双指针应该设置哪两个指针?

前指针 pre,和当前指针 cur。双指针不意味着代码中只能有两个指针,在某些情况下,可能会使用更多的指针来解决特定的问题。

2. 当 cur 指向 pre 后,如何让 cur 指向下一个 cur?

设置 ListNode temp = cur.next; 先将下一个 cur 保存起来。

3. 递归方法(需要单独定义)

作用:用来实现递归操作
参数:cur、pre
如何写递归方法:
1. 明确边界条件:当 cur == null 时
2. 如何递归调用方法 return reverse(cur, pre);文章来源地址https://www.toymoban.com/news/detail-490082.html

三、代码

1. 双指针

public class Solution {

    /**
     * 双指针法
     *
     * @param head
     * @return
     */
    public ListNode reverseList(ListNode head) {
        ListNode cur = head;
        ListNode pre = null;
        while (cur != null) {
            ListNode temp = cur.next;
            cur.next = pre;
            pre = cur;
            cur = temp;
        }
        return pre;
    }
}

class ListNode {
    int val;
    ListNode next;

    public ListNode() {
    }

    public ListNode(int val) {
        this.val = val;
    }

    public ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}

2. 递归

public class Solution {

    /**
     * 递归算法
     *
     * @param head
     * @return
     */
    public ListNode reverseList1(ListNode head) {
        // 递归调用,初始的 cur 就是 head,初始的 pre 就是 null
        return reverse(head, null);
    }
	
	// 递归方法
    public ListNode reverse(ListNode cur, ListNode pre) {
        // 退出条件
        if (cur == null) {
            return pre;
        }
        // 每个节点都需要递归执行的操作
        ListNode temp = cur.next;
        cur.next = pre;
        pre = cur;
        cur = temp;
        // 递归体
        return reverse(cur, pre);
    }
}

class ListNode {
    int val;
    ListNode next;

    public ListNode() {
    }

    public ListNode(int val) {
        this.val = val;
    }

    public ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}

到了这里,关于第二章 链表_206. 反转链表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode 206 - 反转链表

    给定一个单链表的头节点 head ,反转该链表并返回反转后的链表。 我们可以使用迭代或递归的方式来反转链表。 迭代法 初始化三个指针 cur 、 pre 和 next 。 遍历链表,将 cur.next 指向 pre ,然后将 pre 和 cur 向前移动一步。 重复上述步骤,直到 cur 到达链表末尾。 递归法 递归

    2024年01月15日
    浏览(32)
  • leetcode 206.反转链表

    ✨链接:数据结构-手撕单链表+代码详解。 🌟 leetcode链接:反转链表 1️⃣ 代码: 2️⃣ 代码:

    2024年02月12日
    浏览(31)
  • 链表反转-LeetCode206

    题目: 给你单链表的头结点head,请反转链表,并返回反转后的链表。 示例: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 1、建立虚拟头结点辅助反转 分析链表插入元素的时候,会发现如何处理头结点是个比较麻烦的问题,为此可以先建立一个虚拟的结点ans,并且令a

    2024年02月07日
    浏览(37)
  • LeetCode:206. 反转链表

    力扣链接

    2024年01月15日
    浏览(35)
  • 反转链表-力扣206

    2024年02月16日
    浏览(25)
  • 力扣206. 反转链表

    给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 示例 2: 示例 3: 提示: 链表中节点的数目范围是 [0, 5000] -5000 = Node.val = 5000 进阶: 链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题? 如果再定义一个新的链表,实现链表元素

    2024年02月16日
    浏览(23)
  • 每日一题 206反转链表

    给你单链表的头节点  head  ,请你反转链表,并返回反转后的链表。 示例 1: 示例 2: 示例 3:

    2024年02月13日
    浏览(27)
  • 203.移除链表元素&707.设计链表& 206.反转链表

    203.移除链表元素: 给你一个链表的头节点  head  和一个整数  val  ,请你删除链表中所有满足  Node.val == val  的节点,并返回  新的头节点  。 707.设计链表  : 你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。

    2024年02月11日
    浏览(29)
  • 203.移除链表元素|707.设计链表|206.反转链表

    203. 移除链表元素 这里以链表 1 4 2 4 来举例,移除元素4。 如果使用C,C++编程语言的话,不要忘了还要从内存中删除这两个移除的节点, 清理节点内存之后如图: 其实 可以设置一个虚拟头结点 ,这样原链表的所有节点就都可以按照统一的方式进行移除了。 来看看如何设置

    2024年02月11日
    浏览(36)
  • Leetcode-每日一题【206.反转链表】

    给你单链表的头节点  head  ,请你反转链表,并返回反转后的链表。 示例 1: 输入: head = [1,2,3,4,5] 输出: [5,4,3,2,1] 示例 2: 输入:head = [1,2] 输出:[2,1] 示例 3: 输入:head = [] 输出:[] 提示: 链表中节点的数目范围是 [0, 5000] -5000 = Node.val = 5000   1.我们遍历链表,首先设置

    2024年02月12日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包