当前位置: 首页 > article >正文

【LeetCood206】反转链表

题目

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

答案1:

        新建链表,遍历原链表,一个一个头插到新建的链表.直到结点为null

public ListNode reverseList(ListNode head) {
    ListNode secondListHead = null;
        while(head!=null){
            ListNode temp = new ListNode(head.val,secondListHead);
            secondListHead=temp;
            head=head.next;
        }
    return secondListHead;
}

答案2:

        prev是反转后链表的头,cur是等待反转的链表的头,让rec记录等待反转的链表的头的下一位。

        把等待反转的链表的头摘离,也就是cur的next不再是等待反转的链表,而是完成反转链表的头,即cur.next=prev.此时cur成了反转链表的头

        此时把反转的链表的头更新成prev,也就是prev=cur.

        刚刚说了,rec记录的是等待反转链表的头的下一位,又因为他的头被摘离了,所以rec成了等待反转链表的头.于是让cur=rec(rec的作用是防止待反转链表丢失在内存中)

        重复上述操作:先借助cue,用rec记录下下一位结点.摘离头结点,放在反转链表的头位置.更新反转链表的头.cur再重新回到待反转链表的头.往复循环直到cur为null

public ListNode reverseList(ListNode head) {
    ListNode prev = null;
    ListNode cur = head;
    while (cur!=null){
        ListNode rec = cur.next;
        cur.next=prev;
        prev=cur;
        cur=rec;
    }
    return prev;
}

答案3:递归

        已知reverseList(ListNode head)函数的作用是将以head为头结点的链表反转,并返回反转链表的头结点.

        当链表为空,或者只有一个结点时,自然不需要再反转了.

        否则的话,先新建next结点记录一下第二个结点.

        调用自己,新建newHead结点接收反转后的链表.

        已知刚才next结点记录一下第二个结点.反转之后,那么next就成了头结点了.所以此时断开head和链表的连接,并把head接在反转链表的尾巴,即next.next=head.

        最后返回newHead.

        (不用操心去头子链表是如何反转的,只需要做到把头结点接到被处理的子链表的尾部就好了)

public ListNode reverseList(ListNode head) {
    if(head==null||head.next==null){
        return head;
    }
    ListNode next=head.next;
    ListNode newHead = reverseList(head.next);
    head.next=null;
    next.next=head;
    return newHead;
}


http://www.kler.cn/a/16464.html

相关文章:

  • 基于springboot的汽车租赁管理系统的设计与实现
  • 设计模式之装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)
  • 【C语言】值传递和地址传递
  • PNG图片批量压缩exe工具+功能纯净+不改变原始尺寸
  • 车-路-站-网”信息耦合的汽车有序充电
  • 大语言模型:解锁自然语言处理的无限可能
  • Python小姿势 - Python学习笔记——类与对象
  • ZooKeeper安装与配置集群
  • NECCS|全国大学生英语竞赛C类|词汇和语法|词汇题|21:03~21:53
  • 可视化绘图技巧100篇高级篇(一)-环状条形图(radial bar chart)
  • android基础知识
  • Redis高频面试题,使用场景
  • TiDB实战篇-操作系统参数TiDB Server
  • HDU5909 Tree Cutting(FWT)
  • 人人都可用chatgpt开发小项目
  • 第十二章 Transform组件(下)
  • numpy的下载、数据类型、属性、数组创建
  • Redis-列表(List)
  • 【23】linux进阶——linux的软链接和硬链接
  • NTT学习笔记(快速数论变换)
  • 【人脸检测】——YOLO5Face: Why Reinventing a Face Detector论文浅读
  • RT-Thread GD32F4xx 看门狗驱动
  • 1.3 HBase 基本架构
  • Android无线调试操作说明
  • 2023五一数学建模竞赛(五一赛)选题建议
  • 山东专升本计算机第九章-信息安全