从尾到头打印链表
双指针
class Solution {
public int[] reversePrint(ListNode head) {
int idx = 0;
ListNode tmp = head;
while(tmp != null) {
idx ++;
tmp = tmp.next;
}
int[] res = new int[idx];
int i = 0;
while(head != null) {
res[i++] = head.val;
head = head.next;
}
int l = 0, r = idx -1;
while(l < r) {
int t = res[l];
res[l] = res[r];
res[r] = t;
l++;r--;
}
return res;
}
}
反转链表
三指针,挺绕的
class Solution {
public ListNode reverseList(ListNode head) {
ListNode p1 = head, p3 = null;
while(p1 != null) {
ListNode p2 = p1.next; // 暂存后继节点 p1.next
p1.next = p3; // 修改 next 引用指向
p3 = p1; // p3 暂存 p1
p1 = p2; // p1 访问下一节点
}
return p3;
}
}
数组中重复的数字
class Solution {
public int findRepeatNumber(int[] nums) {
int[] st = new int[100010];
for(int i : nums) {
st[i] ++;
if(st[i] > 1)return i;
}
return -1;
}
}
在排序数组中查找数字 I
class Solution {
public int search(int[] nums, int target) {
int res = 0;
for(int x : nums) {
if(x == target) res++;
}
return res;
}
}
0~n-1中缺失的数字
class Solution {
public int missingNumber(int[] nums) {
if(nums[0] != 0)return 0;
int i ;
for(i = 0; i + 1 < nums.length; i++) {
if(nums[i + 1] - nums[i] > 1) return nums[i] + 1;
}
return nums[i]+1;
}
}