文章目录
- [一. 牛客 NC23 划分链表(https://www.nowcoder.com/practice/1dc1036be38f45f19000e48abe00b12f?tpId=196\&tqId=37062\&rp=1\&sourceUrl=/exam/oj?questionJobId=10\&subTabName=online_coding_page\&difficulty=undefined\&judgeStatus=undefined\&tags=\&title=)](#一. 牛客 NC23 划分链表)
-
- [1. 题目](#1. 题目)
- [2. 算法原理](#2. 算法原理)
- [3. 代码](#3. 代码)
- [二. 牛客 NC18 顺时针旋转矩阵(https://www.nowcoder.com/practice/2e95333fbdd4451395066957e24909cc?tpId=196\&tags=\&title=\&difficulty=0\&judgeStatus=0\&rp=1\&sourceUrl=/exam/oj?questionJobId=10\&subTabName=online_coding_page)](#二. 牛客 NC18 顺时针旋转矩阵)
-
- [1. 题目](#1. 题目)
- [2. 算法原理](#2. 算法原理)
- [3. 代码](#3. 代码)
一. 牛客 NC23 划分链表
1. 题目
题目意思已经很明确, 这里不过多赘述

2. 算法原理
- 定义六个变量:
cur -> 表示遍历到原链表当前节点
curNext -> 表示遍历到原链表下一个节点
headMin -> 表示新的小于x链表的头结点
headMax -> 表示新的大于等于x链表的头结点
curMin -> 小于x链表的当前节点
curMax -> 大于等于x链表的当前节点

- 通过赋值与修改 next 域, 来达到最终结果
3. 代码
java
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param x int整型
* @return ListNode类
*/
public ListNode partition (ListNode head, int x) {
ListNode cur = head;
ListNode headMin = new ListNode(-1);
ListNode curMin = null;
ListNode headMax = new ListNode(-1);
ListNode curMax = null;
while (cur != null) {
ListNode curNext = cur.next;
cur.next = null;
if (cur.val < x) {
if (curMin == null) {
curMin = cur;
headMin.next = curMin;
}else {
curMin.next = cur;
curMin = curMin.next;
}
}else {
if (curMax == null) {
curMax = cur;
headMax.next = curMax;
}else {
curMax.next = cur;
curMax = curMax.next;
}
}
cur = curNext;
}
if (curMin != null) {
curMin.next = headMax.next;
return headMin.next;
}else {
return headMax.next;
}
}
}
二. 牛客 NC18 顺时针旋转矩阵
1. 题目

2. 算法原理
这道题画图出来还是很好理解的

3. 代码
java
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param mat int整型二维数组
* @param n int整型
* @return int整型二维数组
*/
public int[][] rotateMatrix (int[][] mat, int n) {
// 1.对调,获取翻转逆置矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
int t = mat[i][j];
mat[i][j] = mat[j][i];
mat[j][i] = t;
}
}
// 2.对逆置矩阵进行每行逆置
for (int i = 0; i < n; i++) {
for (int j = 0; j < n / 2; j++) {
int t = mat[i][j];
mat[i][j] = mat[i][n - 1 - j];
mat[i][n - 1 - j] = t;
}
}
return mat;
}
}