复杂链表的复制

来源:互联网 发布:模拟美股软件 编辑:程序博客网 时间:2024/04/30 07:06

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。


将原来的链表的每个节点都复制到其后面的那个节点,然后将复制节点的random指针指向原来节点的random.next就行,然后从这个链表中分离出两个链表


/*public class RandomListNode {    int label;    RandomListNode next = null;    RandomListNode random = null;    RandomListNode(int label) {        this.label = label;    }}*/public class Solution {    public RandomListNode Clone(RandomListNode pHead)    {        if(pHead == null)return null ;         RandomListNode p = pHead ;         while(p != null){            RandomListNode q = new RandomListNode(p.label) ;             RandomListNode next = p.next ;             p.next = q ;             q.next = next ;             p = next ;         }        p = pHead ;         while(p != null){            RandomListNode q = p.next ;             if(p.random != null){                q.random = p.random.next ;            }            p = p.next.next ;         }        p = pHead ;         RandomListNode root = p.next ;        RandomListNode q = root ;         while(p != null){            p.next = q.next ;             p = p.next ;             if(p == null){                break ;             }            RandomListNode next = q.next.next ;             q.next = next;             q = next ;         }        return root ;     }}
0 0
原创粉丝点击