138. Copy List with Random Pointer

来源:互联网 发布:网络运维学习 编辑:程序博客网 时间:2024/06/06 20:49

A linked list is given such that each node contains an additional
random pointer which could point to any node in the list or null.

Return a deep copy of the list.

/** * 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) {    struct RandomListNode *oldNode = head;    struct RandomListNode *newNode = NULL;    struct RandomListNode *newHead = NULL;    if(head == NULL){        return NULL;    }    /*insert a new randomList Node*/    while(oldNode){        newNode = (struct Random *)malloc(sizeof(struct RandomListNode));        if(NULL == newNode){            return NULL;        }        newNode->label = oldNode->label;        newNode->next = oldNode->next;        newNode->random = oldNode->random;             oldNode->next = newNode;        oldNode = newNode->next;                   }    /*link the new List Node*/    oldNode = head;    while(oldNode){        if(oldNode->random != NULL){            oldNode->next->random = oldNode->random->next;        }        if(oldNode->next!=NULL){            oldNode = oldNode->next->next;        }          }    /*link the new List Node from the old List*/    oldNode = head;    newHead = head->next;    while(oldNode){        newNode = oldNode->next;        oldNode->next = newNode->next;        oldNode = oldNode->next;         if(oldNode != NULL){            newNode->next = oldNode->next;        }                 }    return newHead;}
原创粉丝点击