1. 调整数组顺序使奇数位于偶数前面
1.1 题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
1.2 核心代码实现
public class Solution {
public void reOrderArray(int [] array) {
int index = 0; //变量index用来表示已经将奇数放好的下一个位置
for(int i = 0; i < array.length; i++){
//遍历数组,遇偶数i++,遇奇数,前面偶数均往后移一个位置,将此奇数插入到index位置
if(array[i] % 2 != 0){
int temp = array[i];
for(int j = i - 1; j >= index; j--){
array[j + 1] = array[j];
}
array[index++] = temp;
}
}
}
}
2. 链表中倒数第K个结点
2.1 题目描述
输入一个链表,输出该链表中倒数第k个结点。
2.2 示例1
输入
1,{1,2,3,4,5}
返回值
{5}
2.3 核心代码实现
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head == null || k == 0)
return null;
ListNode slowp = head, fastp = head;
//快指针先行k步
for(int i = 0; i < k; i++){
if(fastp == null) return null;
fastp = fastp.next;
}
//快慢指针同步后移
while(fastp != null){
slowp = slowp.next;
fastp = fastp.next;
}
return slowp;
}
}