剑指offer(13-15)题解
时间:2022-07-23
本文章向大家介绍剑指offer(13-15)题解,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
剑指offer(13-15)题解
- 13题解--调整数组顺序使奇数位于偶数前面
- 14题解--链表中倒数第k个结点
- 15题解--反转链表
13题解–调整数组顺序使奇数位于偶数前面
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路解析
这里我是将奇数和偶数分别压入两个list之中,之后只要按照顺序将元素取出并且重新赋值给数组即可,只要稍微注意一下偶数压入时候的数组下标即可。
源代码
import java.util.ArrayList;
import java.util.List;
public class Solution {
public static void reOrderArray(int [] array) {
//偶数数列
List<Integer>list1=new ArrayList<Integer>();
//奇数数列
List<Integer>list2=new ArrayList<Integer>();
for(int i=0;i<array.length;i++)
{
if(array[i]%2==0)
list1.add(array[i]);
else
list2.add(array[i]);
}
for(int i=0;i<array.length;i++)
{
if(i<list2.size())
array[i]=list2.get(i);
else
array[i]=list1.get(i-list2.size());
}
}
}
14题解–链表中倒数第k个结点
题目描述
输入一个链表,输出该链表中倒数第k个结点。
思路解析
这里我建议大家先return一下头结点看一下是什么格式的,否则可能会一直卡着,这里博主一开始以为返回的会是一个单独的结点元素,但是打印出来看了之后发现并不是这样。 他给的头结点是这样的{1,2,3,4,5}的,如果是倒数第二个节点就应该返回{4,5}这样一个结点,一开始就是因为这个一直卡着。 接下来是思路,因为是链表,没有随机存取的性质,所以我们只能一直先next找到链表一共有多少个元素,并且记住这个链表结点总数。这里我们千万不能直接通过他给定的head节点来进行遍历,否则遍历完成之后我们就没有head可以寻找了,所以我们必须重新给定一个结点,将head结点的属性赋给他,知道总数之后我们就能根据一点数学知识就能知道倒数的节点就是正数的第几个节点。之后通过循环限制次数就能找到我们的节点了
源代码
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode head,int k)
{
int count=1;
int flag=0;
//如果头结点为空直接返回
if(head==null)
{
return head;
}
else
{
ListNode node1=new ListNode(head.val);
node1.next=head.next;
//计算一共有多少个结点
while(node1.next!=null)
{
node1=node1.next;
count++;
}
//如果查找的节点已经超出我们链表的范围,那么我们也是直接返回null即可
if(k>count)
{
return null;
}
else
{
//计算该节点的正数位置,循环遍历即可得到
flag=count-k;
for(int i=0;i<flag;i++)
head=head.next;
return head;
}
}
}
}
15题解–反转链表
题目描述
输入一个链表,反转链表后,输出新链表的表头。
思路解析
大家一看这题就知道,必定是要用到上一题的方法了。大致思路就是我们倒序的将每个节点取出来,然后再将节点串起来,
源代码
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
import java.util.ArrayList;
import java.util.List;
public class Solution {
public ListNode FindKthToTail(ListNode head,int k,int count)
{
if(head==null)
{
return head;
}
else
{
//如果查找的节点已经超出链表的范围也相应的返回为空
if(k>count)
{
return null;
}
else
{
ListNode node1=new ListNode(head.val);
node1.next=head.next;
int flag=count-k;
for(int i=0;i<flag;i++)
node1=node1.next;
return node1;
}
}
}
public ListNode ReverseList(ListNode head) {
int count=1;
if(head==null)
return null;
else
{
ListNode node1=new ListNode(head.val);
node1.next=head.next;
//查找出链表的长度
while(node1.next!=null)
{
node1=node1.next;
count++;
}
//创建list存储倒序排放的节点
List<ListNode>list=new ArrayList<ListNode>();
for(int i=1;i<=count;i++)
{
//这里创建节点的时候只需要给节点赋值即可,切不可相当然的给他们的next节点同时赋值,否则陷入死循环之中
ListNode node=new ListNode(FindKthToTail(head, i, count).val);
list.add(node);
}
for(int i=0;i<list.size()-1;i++)
//这一步我们才开始将整个链表串起来
list.get(i).next=list.get(i+1);
return list.get(0);
}
}
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 什么?面试官让我用ArrayList实现一个阻塞队列?
- A little fun with InnoDB multi-versioning(14.有关InnoDB多版本中的一个小问题)
- 聊聊java中的哪些Map:(八)ConcurrentSkipListMap源码分析
- littlevgl(Lvgl)最新版V7.4移植
- TiKV 源码解析系列文章(二十)Region Split 源码解析
- 轻松构建Tomcat源码
- Flutter中Contrainer 组件的宽高限制分析
- 10张图带你深入理解Docker容器和镜像
- 手摸手教你撸一个微服务框架-关于服务端的处理
- 聊聊claudb的string command
- windows下安装nodejs
- 【Java面试总结】Java集合
- 《JavaScript 模式》读书笔记(8)— DOM和浏览器模式1
- 《JavaScript 模式》读书笔记(8)— DOM和浏览器模式2
- 5000字 | 24张图带你彻底理解21种并发锁