JZ35 复杂链表的复制

文章介绍了如何使用Java创建一个Solution类来实现对RandomListNode类型的链表,包括深拷贝节点、设置复制节点的random指针以及最后分离原链表和复制链表的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
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 pHead;
        // 1.将拷贝节点放到原节点后面,例如1->2->3这样的链表就变成了这样1->1'->2->2'->3->3'
        for (RandomListNode p = pHead, copy = null;     p != null; p = p.next.next) {
            copy = new RandomListNode(p.label);
            copy.next = p.next;
            p.next = copy;
        }
        // 2.把拷贝节点的random指针安排上
        for (RandomListNode p = pHead;                   p != null; p = p.next.next) {
            if (p.random != null) {
                p.next.random = p.random.next;
            }
        }
        // 3.分离拷贝节点和原节点,变成1->2->3和1'->2'->3'两个链表,后者就是答案
        RandomListNode newHead = pHead.next;
        for (RandomListNode p = pHead, temp = null;      p != null && p.next != null;) {
            temp = p.next;
            p.next = temp.next;
            p = temp;
        }
        
        
        
        return newHead;
        
        
        
        
        
        
        
    }
    
    
//     private void clone(RandomListNode pHead){
//         RandomListNode p = pHead;
//         while(p!=null){
//             RandomListNode clone= new RandomListNode(p.label);
//             clone.next=p.next;
//             clone.random=null;
//             p.next=clone;
//             p=clone.next;
//         }
//     }
    
    
//     private void cloneRandom(RandomListNode pHead){
//         RandomListNode p = pHead;
//         while(p!=null){
//             RandomListNode clone= p.next;
            
//             if(p.random!=null){
//                 clone.random=p.random.next;
//             }
//             p=clone.next;
                
            
//         }
//     }
    
//     private RandomListNode divide(RandomListNode head){
//         RandomListNode cloneNode = head.next;
//         RandomListNode cloneHead = cloneNode;
//         head.next=cloneNode;
//         head=head.next;
//         while(head!=null){
//             cloneNode.next=head.next;
//             head.next=head.next.next;
//             head=head.next;
//             cloneNode=cloneNode.next;
//         }
        
//         return cloneHead;
        
//     }
    
    
    
    
    
    
    
    
}













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据精读周刊

喝杯咖啡????

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值