138 copy list with random pointer

1,對(duì)原鏈表每個(gè)節(jié)點(diǎn)進(jìn)行賦值,并插入對(duì)每個(gè)節(jié)點(diǎn)的后面。
2,從頭開(kāi)始對(duì)每個(gè)新加節(jié)點(diǎn)的random位賦值

    if(p->random)
        p->next->random = p->random->next;
    else
        p->next->random = NULL;

3,恢復(fù)原鏈表,同時(shí)把新復(fù)制的節(jié)點(diǎn)保證在新鏈表并返回。

while(old){
    old->next = old->next->next;
    if(new->next)
        new->next = new->next->next;
    else
        new->next = NULL;
    old = old->next;
    new = new->next;
}
free(dummy);
head = oldhead;
return newhead;         
/**
 * Definition for singly-linked list with a random pointer.
 * struct RandomListNode {
 *     int label;
 *     struct RandomListNode *next;
 *     struct RandomListNode *random;
 * };
 */
struct RandomListNode *copyRandomList(struct RandomListNode *head) {

    if(head == NULL)
        return NULL;
    struct RandomListNode *dummy = calloc(1, sizeof(struct RandomListNode));
    dummy->next = head;

    struct RandomListNode * p = dummy->next;

    while(p){
        struct RandomListNode *node = calloc(1, sizeof(struct RandomListNode));
        node->label = p->label;
        node->next = p->next;
        p->next = node;
        p = p->next->next;
    }


    p = dummy->next;

    while(p){
        if(p->random)
            p->next->random = p->random->next;
        else
            p->next->random = NULL;
        p = p->next->next;
    }

    //restor old

    struct RandomListNode * old = dummy->next;
    struct RandomListNode * oldhead = dummy->next;
    struct RandomListNode * new = dummy->next->next;
    struct RandomListNode * newhead = dummy->next->next;



    while(old){
        old->next = old->next->next;
        if(new->next)
            new->next = new->next->next;
        else
            new->next = NULL;
        old = old->next;
        new = new->next;
    }
    free(dummy);
    head = oldhead;
    return newhead;

}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容