首页 > 其他分享 >反转链表

反转链表

时间:2024-05-28 22:24:01浏览次数:14  
标签:current ListNode -- 反转 next 链表 null public

leetcode :206.

需求:

反转链表

原链表:

graph LR A --> B --> C -->D -->null

反转后:

graph RL D -->C --> B --> A -->null graph LR D-->C-->B-->A-->null

双指针法:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int val=0, ListNode next=null) {
 *         this.val = val;
 *         this.next = next;
 *     }
 * }
 */
public class Solution {
    public ListNode ReverseList(ListNode head) {
        //比如有 pre,1,2,3 在1 之前
        ListNode  pre = null;
        var current = head;

        while (current != null)
        {
            //先记录下下一个节点,不然一会找不到了
            var temp = current.next;
            //开始反转
            current.next = pre;
            pre = current;
            current = temp;
        }

        //1-->2-->3-->null
        //当current为null时 pre 刚好为最后一个节点3
        return pre;
    }
}

递归写法:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int val=0, ListNode next=null) {
 *         this.val = val;
 *         this.next = next;
 *     }
 * }
 */
public class Solution {
    public ListNode ReverseList(ListNode head) {
       return reverse(head,null);
    }

    ListNode reverse(ListNode current,ListNode pre)
    {
        if(current == null)
        return null;
        var temp = current.next;
        current.next = pre;
        var result= reverse(temp,current) ;
        return result ==null? current :result;
    }
}

标签:current,ListNode,--,反转,next,链表,null,public
From: https://www.cnblogs.com/ChuanC/p/18219067

相关文章

  • 【LeetCode算法】第83题:删除排序链表中的重复元素
    目录一、题目描述二、初次解答三、官方解法四、总结一、题目描述二、初次解答1.思路:双指针法,只需遍历一遍。使用low指向前面的元素,high用于查找low后面与low不同内容的节点。将具有不同内容的节点链接在low后面,实现重复元素的删除。2.代码:/***Definitionfor......
  • 实现双链表各种基本运算的算法
    实验三:实现双链表各种基本运算的算法一、实验目的与要求目的:领会双链表存储结构和掌握双链表中各种基本运算算法设计。内容:编写一个程序dlinklist.cpp,实现双链表的各种基本运算和整体建表算法(假设链表的元素类型ElemType为char),并在此基础上设计一个程序exp2-3.cPp,......
  • 设计链表
    leetcode:707题这题基本涵盖链表的的常用操作,获取第n个节点的值(从零开始)头部插入节点尾部插入节点第n个节点前插入节点删除第n个节点C#:publicclassMyLinkedList{publicintcount{get;set;}privateNodedummyHead;publicMyLinkedList(){......
  • 【算法】合并k个已排序的链表
    ✨题目链接:NC51合并k个已排序的链表✨题目描述 合并k 个升序的链表并将结果作为一个升序的链表返回其头节点。数据范围:节点总数 0≤......
  • 已知两个长度分别为m和n的升序链表,若将它们合并为长度为m+n的一个降序链表,则最坏情况
    已知两个长度分别为m和n的升序链表,若将它们合并为长度为m+n的一个降序链表,则最坏情况下的时间复杂度是()。解析:选D两个升序合并为降序,操作就不多说了,两数列依次比较放入,其中一个数列结束了,剩下的就不用比了,直接依次放进去。首先明确,题目让我们求复杂度,这里显然不是讨论移动次数,......
  • 【链表】Leetcode 92. 反转链表 II【中等】
    反转链表II给你单链表的头指针head和两个整数left和right,其中left<=right请你反转从位置left到位置right的链表节点,返回反转后的链表。示例1:输入:head=[1,2,3,4,5],left=2,right=4输出:[1,4,3,2,5]解题思路11、遍历链表:找到left前面的节......
  • spring的控制反转(IoC)容器作用是什么?
    控制反转(InversionofControl,IoC)容器是一种强大的设计模式,在现代软件开发,特别是在使用Spring框架等企业级Java应用中至关重要。IoC容器主要作用是管理应用程序中对象的生命周期和依赖关系。我会逐步解释它的作用,并提供一些简单的示例。管理对象的创建和生命周期在没有Io......
  • 链表4(法二)------7-4 sdut-C语言实验-单链表中重复元素的删除
    7-4sdut-C语言实验-单链表中重复元素的删除分数20全屏浏览切换布局作者 马新娟单位 山东理工大学按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个)。输入格式:第一行输入元素个数n(1<=n<=15);第二......
  • 链表6(法二好理解)------ 7-6 sdut-C语言实验-有序链表的归并分数 20
    7-6sdut-C语言实验-有序链表的归并分数20全屏浏览切换布局作者 马新娟单位 山东理工大学分别输入两个有序的整数序列(分别包含M和N个数据),建立两个有序的单链表,将这两个有序单链表合并成为一个大的有序单链表,并依次输出合并后的单链表数据。输入格式:第一行输入M与......
  • 单链表
    单链表是内存地址不连续排列的线性表。单链表每个结点都有两个地址,第一个位置存储数据,第二个位置存储下个结点的内存地址。classNode(object):"""单链表结点"""def__init__(self,val):#_item存储数据self.val=val#_next是下一个......