题解 | #反转链表#

反转链表

https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    public ListNode ReverseList (ListNode head) {
    
       if (head != null && head.next != null) {
            ListNode ActualNext = head.next;
            ListNode lastNode = ReverseList(head.next);
            head.next = null;
            ActualNext.next =head;
            return lastNode;
        }
        return head;
    }
}

这道题做过无数八次了,但是再看还是会想半天,抓耳挠腮不堪其扰,现在我把思路记下来当做以后的提示总可以了吧!

反转链表:顾名思义就是把正向的指向变成翻过来如:1->2->3 变成 3->2->1,初看应该很简单直接循环把 node 节点保存在 list 中再反向遍历 list 把 node 一个一个的 next 到前一个后面。

这种办法可行但是太过于暴力,时间复杂度太高了。相同的数据进行循环,那能不能用递归来解决呢?

我们是要把下一个 node 变成前一个 node 的父节点,那我们就先在代码里面写下 head.next 获取到下一个节点吧!我们是要最后把 lastnode 节点给返回成父节点的,所以直接进行递归传入 head.next 返回的 node 就是我们的 lastnode 节点,好了往下走我们进行 head.next.next的赋值ActualNext.next =head;在把 head.next = null 断开和后一个节点的联系。这样 1 节点后面就不会是 2了。

完美!!!

#编程算法学习#
全部评论

相关推荐

01-12 14:08
门头沟学院 Java
有寒假来武汉小米总部实习的大学生嘛,我也是小米的员工,想找合租舍友,仅限女生可免租半月,二月初可入住,也就是说房租是2.15开始算的哦~也可以将行李提前放过来~房屋介绍:1、房子情况:有电梯;租的是三室一厅一卫一厨, 但是有个卧室比较小,不打算找人,只住两个人就可以了;衣柜也很大,可以放下很多衣服;房屋采光真的很好,早上起来可以在床上晒太阳的那种,十分惬意(夏季晚上十分好看!)2. 楼下离我们很近的地方有小吃街和一个两层大超市(大概步行两分钟多就可以走到) ,还有一个新开的麦当劳,晚上可以去吃小吃,购买物资也可以去大超市;3. 房子基本设施齐备(洗衣机,冰箱,空调,油烟机,热水器);4. 我有稳定的工作,生活中很注意卫生,周末有时间会自己做饭,可以投喂哦~5. 出行:距离公交站步行10分钟不到,距政务中心,武汉小米总部三站(晚上我都是走回来的,很近的~);一个比较进的地铁,距离大概1km左右;出入我觉得很方便;6. 房租:1150每月,押一付二,无物业费,也没有中介费和其他额外费用。7. 民用水电燃气,用多少交多少,水电费正常平摊。希望你是:1. 女生(本人女),不带异性回家,如有同性朋友来玩,最多过夜一晚;2. 爱干净,讲卫生,作息正常,不吵闹,有稳定工作;3. 好沟通,有任何问题一定要沟通,不要闷着!中介勿扰,非诚勿扰!!!希望不要浪费彼此的时间诚心有意向的可以联系我看房
租房找室友
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务