LeetCode-138-复制带随机指针的链表-C语言

/*
 * 算法思想:
 * 第一遍遍历所有节点,建立新链表,先将所有random指针置为NULL;
 * 第二遍,为新链表建立random指针,参照旧链表的指向;
 * 时间复杂度O(N^2),建立random指针时每个节点都要访问所有节点查询指向哪个节点。
 *
 *
*/
class Solution {
public:
    Node* copyRandomList(Node* head) {
        Node *p = head;
        Node *last = NULL;
        Node node;
        node.next = NULL;
        Node *rear = &node;
        Node *tmp = NULL;
        Node *q = NULL;
        
        while(p) {
            /* alloc a new object */
            tmp = new Node();
            tmp->val = p->val;
            tmp->random = NULL;
            
            /* add node tmp to temp list */
            rear->next = tmp;
            rear = rear->next;
            rear->next = NULL;
            
            p = p->next;
        }
        
        p = head;
        q = node.next;
        while(p && q){
            if(p->random){
                tmp = head;
                rear = node.next;
                while(tmp && rear){
                    if(p->random == tmp){
                        q->random = rear;
                        break;
                    }
                    
                    tmp = tmp->next;
                    rear = rear->next;
                }
            }
            
            p = p->next;
            q = q->next;
        }
        
        return node.next;
    }
};














猜你喜欢

转载自blog.csdn.net/weixin_36094222/article/details/90084502