首页 > 其他分享 >leetcode 206. Reverse Linked List 反转链表(简单)

leetcode 206. Reverse Linked List 反转链表(简单)

时间:2022-09-01 20:44:49浏览次数:84  
标签:head ListNode Reverse val 206 next 链表 prev

一、题目大意

给你单链表的头节点 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

进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/reverse-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、解题思路

用迭代和递归来实现,迭代思路:在原镮之前建立一个空的prev节点,因为首节点会变,从head开始,将之后的一个节点移到prev之后,重复此操作直到head成为末节点为止

递归思路:终止条件head为空,定义一个节点prev作为返回链表,每次将旧链表的head的下一个元素指向到prev,这样旧链表原来的下一个元素作为head,旧链表的head作为prev来调用递归函数

三、解题方法

3.1 Java实现-迭代

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode prev = null;
        ListNode next;
        while (head != null) {
            next = head.next;
            head.next = prev;
            prev = head;
            head = next;
        }
        return prev;
    }
}

3.2 Java实现-递归

public class Solution2 {
    public ListNode reverseList(ListNode head) {
        ListNode prev = null;
        return reverseList(head, prev);
    }

    public ListNode reverseList(ListNode head, ListNode prev) {
        if (head == null) {
            return prev;
        }
        ListNode next = head.next;
        head.next = prev;
        return reverseList(next, head);
    }
}

四、总结小记

  • 220901 9月第1天

标签:head,ListNode,Reverse,val,206,next,链表,prev
From: https://www.cnblogs.com/okokabcd/p/16647765.html

相关文章

  • 链表的头插法和尾插法
    复习一下链表的插入操作头插法创建一个临时节点存放数据将头部指针后面的数据都链接到这个临时节点后面将这个临时节点再链接到头部指针后面尾插法创建......
  • 206 反转链表
    题目206反转链表给你单链表的头节点head,请你反转链表,并返回反转后的链表。示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出:[2,1]示例......
  • [Google] LeetCode 150 Evaluate Reverse Polish Notation
    EvaluatethevalueofanarithmeticexpressioninReversePolishNotation.Validoperatorsare+,-,*,and/.Eachoperandmaybeanintegeroranotherexpres......
  • 61. 旋转链表
    61.旋转链表给你一个链表的头节点head,旋转链表,将链表每个节点向右移动 k 个位置。 示例1:输入:head=[1,2,3,4,5],k=2输出:[4,5,1,2,3]示例2:输入:hea......
  • 前端也该刷点算法题——双指针解“链表”题也太香了叭!
    双指针解“链表”题也太香了叭!同步双指针1查找链表中倒数第k个节点剑指Offer22.链表中倒数第k个节点思路:假设链表的长度为n,不难得出倒数第k个节点即为整数第n+......
  • leetcode 1019. 链表中的下一个更大节点 js实现
    给定一个长度为 n 的链表 head对于列表中的每个节点,查找下一个更大节点的值。也就是说,对于每个节点,找到它旁边的第一个节点的值,这个节点的值严格大于它的值。返回......
  • NowCoder BM1 反转链表
    描述给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。NowCoderBM1反转链表importjava.util.*;/*public......
  • Javascript中的链表
    Javascript中的链表数据结构的介绍文章。链表概念与应用于Javascript语言的实际示例。介绍数据结构是一种有效处理大量数据的手段,了解它的结构和组成为我们提供了更......
  • 数据结构之链表的原理
    链表:在计算机中用一组任意的存储单元存储线性表的数据元素称为链式存储结构,这组存储结构可以是连续的,也可以是不连续的,因此在存储数据元素时可以动态分配内存。注:在java中......
  • 从零构建链表
    最重要的头节点是这样创建的:        Node*Head=newNode;//头节点不存储数据        Head->next=NULL;        Node*pre=Head......