博客
关于我
反转字符串 + 反转链表
阅读量:213 次
发布时间:2019-02-28

本文共 1124 字,大约阅读时间需要 3 分钟。

链表是通过指针串联在一起的线性数据结构,每个节点由数据域和指针域组成。单链表的每个节点仅有一个指针域指向下一个节点,而双链表则有两个指针域,分别指向上一个和下一个节点。循环链表则形成一个环。

数组是连续内存空间上的数据集,可以通过下标访问元素。然而,增删元素时会导致连续内存空间的移动,时间复杂度为O(n),不适合频繁操作。

LeetCode344: 反转字符串()

编写一个函数将输入字符串反转。输入字符串以char数组形式给出,要求原地修改输入数组,使用O(1)额外空间。

示例1: 输入:["h", "e", "l", "l", "o"] 输出:["o", "l", "l", "e", "h"]

示例2: 输入:["H", "a", "n", "n", "a", "h"] 输出:["h", "a", "n", "n", "a", "H"]

使用双指针交换字符位置,原地反转数组:

public void reverseString(char[] s) {
int i = 0, j = s.length - 1;
while (i < j) {
char temp = s[i];
s[i] = s[j];
s[j] = temp;
i++;
j--;
}
}

LeetCode206: 反转链表

反转单链表,输入1→2→3→4→5→NULL,输出5→4→3→2→1→NULL。

示例: 输入:1→2→3→4→5→NULL 输出:5→4→3→2→1→NULL

通过遍历链表,逐个节点反转指针:

public class Solution {
public ListNode reverseList(ListNode head) {
ListNode cur = head;
ListNode pre = null;
while (cur != null) {
ListNode temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
}
}

注意事项

  • 临时变量temp保存当前节点的下一个节点。
  • 将当前节点的指针域指向pre,实现反转。
  • 更新pre指针和cur指针,逐步遍历链表。

通过双指针交换,实现链表反转,时间复杂度为O(n),空间复杂度为O(1)。

转载地址:http://elri.baihongyu.com/

你可能感兴趣的文章
nodejs基于art-template模板引擎生成
查看>>
nodejs字符与字节之间的转换
查看>>
NodeJs学习笔记001--npm换源
查看>>
NodeJs学习笔记002--npm常用命令详解
查看>>
nodejs学习笔记一——nodejs安装
查看>>
vue3+Element-plus icon图标无法显示的问题(已解决)
查看>>
NodeJS实现跨域的方法( 4种 )
查看>>
nodejs封装http请求
查看>>
nodejs常用组件
查看>>
nodejs开发公众号报错 40164,白名单配置找不到,竟然是这个原因
查看>>
Nodejs异步回调的处理方法总结
查看>>
NodeJS报错 Fatal error: ENOSPC: System limit for number of file watchers reached, watch ‘...path...‘
查看>>
nodejs支持ssi实现include shtml页面
查看>>
Nodejs教程09:实现一个带接口请求的简单服务器
查看>>
nodejs服务端实现post请求
查看>>
nodejs框架,原理,组件,核心,跟npm和vue的关系
查看>>
Nodejs概览: 思维导图、核心技术、应用场景
查看>>
nodejs模块——fs模块
查看>>
Nodejs模块、自定义模块、CommonJs的概念和使用
查看>>
nodejs生成多层目录和生成文件的通用方法
查看>>