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

网站开发用php还是js北京网络推广公司排行

网站开发用php还是js,北京网络推广公司排行,文库网站怎么做seo,做网站做国外广告其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 方法一:迭代(双指针) 2.2 方法二:递归 三、代码 3.…

其他系列文章导航

Java基础合集
数据结构与算法合集

设计模式合集

多线程合集

分布式合集

ES合集


文章目录

其他系列文章导航

文章目录

前言

一、题目描述

二、题解

2.1 方法一:迭代(双指针)

2.2 方法二:递归

三、代码

3.1 方法一:迭代(双指针)

3.2 方法二:递归

四、复杂度分析

4.1 方法一:迭代(双指针)

4.2 方法二:递归


前言

这是力扣的 206 题,难度为简单,解题方案有很多种,本文讲解我认为最奇妙的一种。

继续开始链表的模块了,这道题是一道非常好的队列的例题,很有代表性。


一、题目描述

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

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


二、题解

因为进阶要求两种方法来解决这道题目,所以本文都讲解!

如下图所示,题目要求将链表反转。本文介绍迭代(双指针)、递归两种实现方法。

Picture1.png

2.1 方法一:迭代(双指针)

思路与算法:

假设链表为 1→2→3→∅,我们想要把它改成 ∅←1←2←3。

在遍历链表时,将当前节点的 next 指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。

2.2 方法二:递归

递归版本稍微复杂一些,其关键在于反向工作。假设链表的其余部分已经被反转,现在应该如何反转它前面的部分?

假设链表为:
n1→…→nk−1→nk→nk+1→…→nm→∅

若从节点 nk+1到 nm已经被反转,而我们正处于 nk。

n1→…→nk−1→nk→nk+1←…←nm

我们希望 nk+1的下一个节点指向 nk。

所以,nk.next.next=nk

需要注意的是 n1的下一个节点必须指向 ∅。如果忽略了这一点,链表中可能会产生环。


三、代码

3.1 方法一:迭代(双指针)

Java版本:

class Solution {public ListNode reverseList(ListNode head) {ListNode cur = head, pre = null;while(cur != null) {ListNode tmp = cur.next; // 暂存后继节点 cur.nextcur.next = pre;          // 修改 next 引用指向pre = cur;               // pre 暂存 curcur = tmp;               // cur 访问下一节点}return pre;}
}

C++版本:

class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode *cur = head, *pre = nullptr;while(cur != nullptr) {ListNode* tmp = cur->next; // 暂存后继节点 cur.nextcur->next = pre;           // 修改 next 引用指向pre = cur;                 // pre 暂存 curcur = tmp;                 // cur 访问下一节点}return pre;}
};

Python版本:

class Solution:def reverseList(self, head: ListNode) -> ListNode:cur, pre = head, Nonewhile cur:tmp = cur.next # 暂存后继节点 cur.nextcur.next = pre # 修改 next 引用指向pre = cur      # pre 暂存 curcur = tmp      # cur 访问下一节点return pre

3.2 方法二:递归

Java版本:

 public ListNode reverseList(ListNode head) {return recur(head, null);}private ListNode recur(ListNode cur, ListNode pre) {if (cur == null) return pre;ListNode res = recur(cur.next, cur);cur.next = pre;return res;}

C++版本:

class ListNode {
public: int val;ListNode* next;
};ListNode* reverseList(ListNode* head) {ListNode* pre = nullptr;ListNode* cur = head;while (cur) {ListNode* next = cur->next;cur->next = pre;pre = cur;cur = next;}return pre;
}

Python版本:

class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextdef reverseList(head):def recur(cur, pre):if not cur:return preres = recur(cur.next, cur)cur.next = prereturn resreturn recur(head, None)

四、复杂度分析

4.1 方法一:迭代(双指针)

  • 时间复杂度 O(N) : 遍历链表使用线性大小时间。
  • 空间复杂度 O(1) : 变量 pre 和 cur 使用常数大小额外空间。

4.2 方法二:递归

  • 时间复杂度 O(N) : 遍历链表使用线性大小时间。
  • 空间复杂度 O(N) : 遍历链表的递归深度达到 N ,系统使用 O(N) 大小额外空间。

http://www.khdw.cn/news/15796.html

相关文章:

  • 网站建设步骤及分工百度指数教程
  • 手机网站建设软件有哪些方面网络营销和传统营销的区别有哪些
  • 门户网站与官网的区别百度排名点击软件
  • 网站建设开发免费咨询站长工具seo综合查询 分析
  • 妇科医院网站建设电商平台推广怎么做
  • 网站的设计页面网络营销方案案例
  • 滨州做网站的怎么在百度上推广自己的店铺
  • 哈尔滨制作网站多少钱营销推广模式有哪些
  • wordpress国内访问不了武汉seo百度
  • 国外企业网站怎么做seo排名软件怎么做
  • 建筑公司网站能显示二级建造师报名吗张文宏说上海可能是疫情爆发
  • 成都解放号网站建设怎么网络推广自己业务
  • 中国建设银行官网站住房公积金全网搜索关键词查询
  • 返利的网站怎么做站长工具是干嘛的
  • wordpress post下载信息流广告优化师
  • 嘉兴建站模板厦门人才网唯一官方网站
  • 网站建设多少钱个人网络广告营销策划方案
  • 有专门做ppt的网站吗免费推广广告链接
  • 常州专业网站建设公司深圳网络推广培训
  • 黄山网站推广公司seo黑帽技术
  • 网站建设的风险浏览器2345网址导航下载安装
  • 网站优化怎么学永久免费自助建站平台
  • 魏县做网站一键优化大师下载
  • 做跨境电商网站有哪些重庆关键词快速排名
  • 做外贸都有哪些好网站如何做网站营销推广
  • 网站设计项目书跨境电商怎么开店铺
  • 成都网站建设公司官网网络推广方案的基本思路
  • 委托别人做网站 域名所有权厦门百度seo
  • 如何对django网站做测试谷歌搜索引擎香港入口
  • 中文安卓app开发工具seo网站排名全选