打卡(15)

https://leetcode-cn.com/problems/reverse-linked-list-ii/submissions/
这个题目还挺简单,可能只需要注意几个小小问题。
头指针当然是一直指向头的,但是这个头,如果在之后进行了交换那么,他就不再是头指针,为了确保头指针的准确性,应当引入一个头前缀指针pre来表示头的前缀。使得最后返回pre->next是绝对正确的。
而我似乎对于头指针有着奇怪的执念,逻辑错误让错误沉入水下。

class Solution {
    
    
public:
    ListNode* reverseBetween(ListNode* head, int left, int right){
    
    
        int num=right-left;//操作次数
        ListNode* pre,* ending,* temp=new ListNode(0,head),*cur;//前者,尾巴,中间,当前
        ListNode* op=temp;;
        for(int i=0;i<left-1;i++)
            op=op->next;
        pre=op;//找到头前缀

        op=temp;//重新置位
        for(int i=0;i<right;i++)
            op=op->next;//进行寻找交换的尾巴
        ending=op;

        while(num--){
    
    
            cur=pre->next;//确定当前要移动的元素
            pre->next=cur->next;//确定前缀的后继
            cur->next=ending->next;//确定当前元素的后继
            ending->next=cur;//将尾巴的后继修改为当前元素
        }
        return temp->next;
    }
};

https://leetcode-cn.com/problems/spiral-matrix/
这个题目似乎很有意思。/睁眼

class Solution {
    
    
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix){
    
    
        int n=matrix.size();
        int m=matrix[0].size();
        vector<vector<int>> matrix_s(n,vector<int>(m,0));
        int sum=0;
        int total=n*m;
        vector<int> ans(total);
        int l=0,r=0;
        while(sum<total){
    
    
            while(r<m&&!matrix_s[l][r]){
    
    
                matrix_s[l][r]=1;
                ans[sum++]=matrix[l][r];
                r++;
            }//向右走
            r--;l++;
            while(l<n&&!matrix_s[l][r]){
    
    
                matrix_s[l][r]=1;
                ans[sum++]=matrix[l][r];
                l++;
            }//向下走
            l--;r--;
            while(r>=0&&!matrix_s[l][r]){
    
    
                matrix_s[l][r]=1;
                ans[sum++]=matrix[l][r];
                r--;
            }//向左走
            l--;r++;
            while(l>=0&&!matrix_s[l][r]){
    
    
                matrix_s[l][r]=1;
                ans[sum++]=matrix[l][r];
                l--;
            }//向上走
            l++;r++;
        }
        return ans;
    }
};

就是这样写起来似乎有些费事情,一开始忽略了矩阵可以不是方阵,所以,修改的时候,又总是修改不完全,这个时候总是出现一些段错误。

题外话,本来以为自己写了不少题目了,以为得有二三百题目了。结果LeetCode上还不到一百。估计一下,总的加起来写过的题目也超不过200题。
这样的话,和别人的差距,会有多么大呢。

return 0;

猜你喜欢

转载自blog.csdn.net/weixin_47741017/article/details/114987228
15