求助|总是写一坨屎山怎么办
1654
2024.01.21
发布于 未知归属地

救命!!!!!
我做题目的时候出来的代码总是比题解多三四十行,到底怎样才能写出那种简洁巧妙的代码啊???
我个人思考问题的很多时候是一种步步为营的感觉,什么意思呢?就是总会把题目往模拟的方向上靠。
这就会导致一个问题,我在写代码的时候别人的一步可能是我的三步。。。。
请问各位佬,怎样改变思考方式啊啊啊啊 orz orz orz

P.S.
下面是一个例子
138. 随机链表的复制

/*
// Definition for a Node.
class Node {
public:
    int val;
    Node* next;
    Node* random;
    
    Node(int _val) {
        val = _val;
        next = NULL;
        random = NULL;
    }
};
*/

class Solution {
public:
    Node* copyRandomList(Node* head) {
        vector<int> arr;
        Node* rec=head;
        Node* rec1=head;
        while(rec!=NULL)
        {
            int s=0;
            while(rec1)
            {
                if(rec1==rec->random)
                {
                   arr.push_back(s);
                   break;
                } 
                s++;
                rec1=rec1->next;
            }
            if(rec1==NULL)
            arr.push_back(-1);
            rec1=head;
            rec=rec->next;
        } 
        Node* newHead=new Node(-1);
        Node* res=newHead;
        Node* temp=head;
        while(temp)
        {
            Node* newNode=new Node(temp->val);
            newHead->next=newNode;
            newHead=newNode;
            temp=temp->next;
        }
        newHead->next=NULL;
        newHead=res->next;
        Node* recc=res->next;
        int l=arr.size();
        for(int i=0;i<l;i++)
        {
            if(arr[i]==-1)
            newHead->random=NULL;
            else
            {
                Node* temptemp=recc;
                for(int j=0;j<arr[i];j++)
                {
                    temptemp=temptemp->next;
                }            
                newHead->random=temptemp;
            }
            newHead=newHead->next;
        }
        return res->next;
    }
};
评论 (7)