LeetCode 283.移动零;LeetCode 234.回文链表

自己一开始写的是两趟遍历
class Solution {
public void moveZeroes(int[] nums) {
int j=0;
for(int i=0;i<nums.length;i++){
if(nums[i]!=0){
nums[j]=nums[i];
j++;
}
}
for(int i=j;i<nums.length;i++){
nums[i]=0;
}
}
}
后面发现可以直接交换
class Solution {
public void moveZeroes(int[] nums) {
int j=0,b;
for(int i=0;i<nums.length;i++){
if(nums[i]!=0){
b=nums[j];
nums[j]=nums[i];
nums[i]=b;
j++;
}
}
}
}
解法一:两趟遍历
步骤 操作
第 1 趟 用 j 记录位置,把非零数依次移到前面
第 2 趟 从 j 到末尾,全部补 0
解法二:一趟遍历 + 交换
核心 操作
指针 j 始终指向下一个非零数应该放的位置
指针 i 遍历整个数组
遇到非零 与 nums[j] 交换,然后 j++

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public boolean isPalindrome(ListNode head) {
ArrayList<Integer> a = new ArrayList<>();
while(head!=null){
a.add(head.val);
head=head.next;
}
int left=0;
int right=a.size()-1;
while(right>left){
if (!a.get(left).equals(a.get(right))) {
return false;
}
left++;
right--;
}
return true;
}
}
浙公网安备 33010602011771号