js当前时间往前推6个月_小夕用20张图,1个动画,6种语言击败了100%!一道经典腾讯面试题...

小夕的公众号发文方式

  • 由于公众号的改版,如果不经常发文的话,小夕的读者朋友们会收不到小夕的写的文字,因此天天发文就很必要
  • 但小夕的一篇漫画算法原创文章,大概需要5-10个小时的耗时,动画+漫画的那些图片制作起来非常费时间!
  • 所以为了既天天发文,又能保持高质量的漫画算法原创文章的更新,现绝对用如下的发文方式

之前的原创动漫漫画算法文

戳一下即可进行跳转哦~

动漫算法:字节面试题太坑了,刚回答完,就被面试官diss了!

动漫算法:作业帮面试题:求一个数的二进制中1的个数

动漫算法:百度面试题:用两个栈实习一个队列

动漫算法:如何在二维数组中找到一个数?

动漫算法:美团面试题:根据前序序列和中序序列重建二叉树!

动漫算法:美团面试题,将链表逆序存放到数组中

动漫算法:腾讯面试题,请实现把字符串中的空格替换为“%20”

发文方式

  • 小夕会天天更新文章,文章以小夕的每日在算法刷题群公布的题目的题解为主,另外每天小夕会在文章中聊一下在大厂百度(嗯~是的小夕在百度工作)的遇到的问题和一些工作经验(注意这些文章以每天刷题为主,所以这些文章第二天就会删除,所以请紧随小夕的步伐刷题,后续看情况再议,目前是决定当天发文,第二天删文)
  • 小夕的漫画算法原创文章会保持一周1-2篇的更新
  • 这样小夕既能天天发文保持天天更新,又能保证高质量的算法原创文章了~

题目

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

示例:

输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL

限制:

0 <= 节点个数 <= 5000

题解

题解动画

cf51cb7eddbebe350a29a2b6f9862dc5.gif小夕来和大家分析一下这个动画,看完动画我们发现一个事情:用一个pre节点指向前一个节点,用cur节点指向当前节点,然后我们让cur的next节点指向pre就完成了反转。

小夕暂停10s,大家细细品一下~你品,你细品~

嗯,接下来问题来了,我们把这幅动画暂停一下截一张图出来~~~f814cb0ea0ab8edf7d75f4bd15d3a99c.png小夕打一个大大的问号,嘿嘿~~

聪明的读者朋友们,有没有发现这里断开了呀~~~ 断开了那么它是接下来如何找到下一个节点2的呢?

为了找到下一个节点,**必须新建一个节点tmp把下一个节点(也就是2节点)保存起来,这样当断开以后才可以找到下一个节点~~~ **

妙不妙~~~

图解描述

参考https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/solution/dong-hua-yan-shi-duo-chong-jie-fa-206-fan-zhuan-li/

初始状态7909d34a6100f582c373d1532ea47f26.png下图中cur执行head头节点,pre是cur的左边的前一个节点,所有pre是nullcedbad35811016079973bf5d35f8e86f.png进入循环6d94c6ebc5a4d477649068f734b2ae80.png由于存在之前说的断开的情况,小夕这里采取tmp节点提前保存好下一个节点。也就是tmp = cur.next630d6280eb413b8f1f4f5118ff16754b.png接下来就是cur指向pre节点了,这样就成功反转了第一个1号节点了。5dde064441e65ac0c34d142877bca789.png为了继续进行反转,pre节点往前移动到cur节点,也就是pre = cur07d633a7d97800c55ea6c7897bf51ab1.png那么由于pre节点往前移动了,小夕聪明的读者朋友们肯定就会知道接下来是要干什么了。cur也往前移动到下一个节点。如果移动呢?由于断开以后小夕提前保存好了下一个节点,所以让cur=tmp 这样cur节点就指向下一个节点了。c0291a4c40d87b3b67348252c9206ffb.png循环还未结束。继续重复上面的操作。f6cca4c81c82449786a7bc576de35365.png一样的道理,tmp继续提前保存好cur的下一个节点。0b2bd48c9e4e9e684eb20b0c58a9a38a.pngcur.next指向pre节点,完成2号节点的反转。c21fd4c6ff9a527bbdf15561a0919747.pngpre往前移动,同上dc083f74c07e22e7a83df1b43ab682ca.pngcur指向提前保存好的tmp节点,开始准备反转3号节点。2dd86d11b14469de7a864c04fc517483.png循环还未结束,继续往下。949fea44c6aaf704ce6c7116778627c7.pngtmp继续指向下一个节点,也就是null节点了。7b95bdd7092c67218b6c898fc29bcdcd.pngcur.next指向pre节点,完成3号节点的反转。dc4c909dc0d20b543c5deb00b9272aa2.pngpre继续往前移动 (这里注意pre的位置,小夕的聪明读者肯定发现了pre指向反转后的头结点!!!)a319c2080350cef74db2d6a693b13257.pngcur也继续往前移动。c36ff202f5a5b741f4dcb98c022b8988.pngcur节点为null,循环结束。cdead506d01fe3d80a7e651b6295cd9f.png0d2b6c6b1245c0c2f837ea49da6f4c42.png

看到这里,小夕的读者应该明白了吧,当然如果小夕没说明白,可以加小夕的微信(teihanhan12341) 不懂的问小夕啦~~~ 接下来上代码~~~ gogogo

代码

Java

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
 public ListNode reverseList(ListNode head) {
  //申请节点,pre和 cur,pre指向null
  ListNode pre = null;
  ListNode cur = head;
  while(cur!=null) {
   //记录当前节点的下一个节点 这里用next保留一下 也就是tmp 
   ListNode next = cur.next;
   //然后将当前节点指向pre
   cur.next = pre;
   //pre和cur节点都前进一位
   pre = cur;
   cur = next;
  }
  return pre;
 }
}

Python

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
 def reverseList(self, head):
  """
  :type head: ListNode
  :rtype: ListNode
  """
  # 申请两个节点,pre和 cur,pre指向None
  pre = None
  cur = head
                nxet = None

  while cur:
   # 记录当前节点的下一个节点
   nxet = cur.next
   # 然后将当前节点指向pre
   cur.next = pre
   # pre往前移动一位到cur节点位置 
   pre = cur
            # 所以cur也要往前移动一位到next节点位置 
   cur = nxet
  return pre 

c++

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* cur = NULL;
        ListNode* pre = head;
        while (pre != NULL) {
            // 记录当前节点的下一个节点
            ListNode* next = pre->next;
            // 然后将当前节点指向pre 反转
            pre->next = cur;
            //  pre往前移动一位到cur节点位置 
            cur = pre;
            //  # 所以cur也要往前移动一位到next节点位置 
            pre = next;
        }
        return cur;
    }
};

JS

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function(head) {
    var pre = null;
    var cur = head;
    var next = null;
    while(cur){
        next = cur.next;//修改前先记住下一个节点
        cur.next = pre; //改别指向,第一个节点prev是null,
        pre = cur; // 记录前一个节点,供下次循环使用
        cur = next; // cur通过next指向下一节点
    }
    return pre;
};

php

/**
 * Definition for a singly-linked list.
 * class ListNode {
 *     public $val = 0;
 *     public $next = null;
 *     function __construct($val) { $this->val = $val; }
 * }
 */
class Solution {

    /**
     * @param ListNode $head
     * @return ListNode
     */
    function reverseList($head) {
        $cur = $head; 
        $pre = null;
        while($cur){
            $next = $cur->next;
            $cur->next = $pre;
            $pre = $cur;
            $cur = $next;
        }
        return $pre;
    }
}

Go

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func reverseList(head *ListNode) *ListNode {
    if head == nil {
        return nil
    }

    var pre *ListNode
    cur := head

    for cur != nil {
        next := cur.Next
        cur.Next = pre
        pre = cur
        cur = next
    }

    return pre
}

睡觉睡觉

小夕终于写完了!!!冲冲冲!准备睡觉啦!开心!!!文章觉得不错的记得在看转发一下呀朋友们!!!凌晨1点,今天比昨天早了点开心!3a6e8a0b81bc350ca0e62ca341394404.png小夕的读者朋友不盼我点好~~~委屈,好的知道大家开玩笑的啦哈哈哈哈哈哈

小夕最后有话说

  • 动画、漫画、加6种编程语言(Java、C++、PHP、GO、Python、JS)的讲解很费心血,希望大家能帮忙转发到朋友圈和身边的朋友,这样小夕的文章能让更多的人看见的话,小夕会更有动力更新文章的呀~
  • 公众号后台回复 打卡 查看公众号福利 坚持转发文章到朋友圈,小夕送上100元的红包给你,谢谢铁杆粉丝的支持。
  • 加小夕微信 tiehanhan12342 拉你进算法刷题群。

             b1feec5142fd8c760e62528dfd5a3dcb.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值