59螺旋矩阵&链表203移除链表元素

103 阅读2分钟

写了螺旋矩阵这个数组算法,一开始写的时候大概想到有四个点,然后彼此环绕做循环从而成功地实现螺旋矩阵这一效果。

class Solution {
    public int[][] generateMatrix(int n) {
        int[][] re = new int[n][n];
        int loop = n / 2;  
        int num = 1;
        int startx = 0;
        int starty = 0;
        int offset = 1;  //为了维持遍历的长度,遵循左闭右开原则
        int mid = n/2;    //在这里判断中间的数的索引
        while(loop!=0){
            loop--;
            int i = startx;
            int j = starty;
            //接下来是四个循环
            for(j = starty;j < starty+n-offset; j++){
                re[startx][j] = num++;
            }
            for(i=startx;i<startx+n-offset;i++){
                re[i][j] = num++;
            }
            for(j=i;j>starty;j--){
                re[i][j] = num++;
            }
            for(;i>startx;i--){
                re[i][j] = num++;
            }
            //这里是为了第二圈开始时起始的位置都要+1
            startx++;
            starty++;
            offset += 2; //在这里的遍历长度要-2的原因是之前遍历时走了一个数,同时要保证左闭右开原则,所以这里-2了

        } 
        //这里也会经常漏掉,给如果n为奇数时给中间的数赋值
        if(n%2!=0){
            re[mid][mid] = num;
        }
        return re;
    }
}

然后来到了链表环节,在这里有个知识点一定要记住:

  • 定义数组的时候,长度是固定的,如果想改动数组的长度,则需要重新定义一个新的数组。
  • 链表的长度可以是固定不变的,而且还可以动态增删,适合数据量不固定、频繁增删、较少查询的场景

链表的操作不是很熟,这个算法挺简单的,就是部分操作要熟悉点。

/**
 * 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 ListNode removeElements(ListNode head, int val) {
        if(head == null){
            return head;
        }
        ListNode zun = new ListNode(-1,head);
        ListNode pre = zun;
        ListNode cur = head;
        while(cur != null){
            if(cur.val == val){
                pre.next = cur.next;
            }
            else {
                pre = cur;
            }
            cur = cur.next;
        }
        return zun.next;   //因为可能涉及到头结点,你这样返回的就是一个空数组,所以才有zun的存在
}
}```