20240525 Finished
This commit is contained in:
		
							
								
								
									
										87
									
								
								LeetCodeSharp/Problems/Solution138.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								LeetCodeSharp/Problems/Solution138.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,87 @@
 | 
			
		||||
// [138] Copy List with Random Pointer
 | 
			
		||||
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
 | 
			
		||||
namespace LeetCodeSharp.Problems138
 | 
			
		||||
{
 | 
			
		||||
    // Submission codes start here
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
// Definition for a Node.
 | 
			
		||||
public class Node {
 | 
			
		||||
    public int val;
 | 
			
		||||
    public Node next;
 | 
			
		||||
    public Node random;
 | 
			
		||||
 | 
			
		||||
    public Node(int _val) {
 | 
			
		||||
        val = _val;
 | 
			
		||||
        next = null;
 | 
			
		||||
        random = null;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
    public class Node
 | 
			
		||||
    {
 | 
			
		||||
        public int val;
 | 
			
		||||
        public Node next;
 | 
			
		||||
        public Node random;
 | 
			
		||||
 | 
			
		||||
        public Node(int _val)
 | 
			
		||||
        {
 | 
			
		||||
            val = _val;
 | 
			
		||||
            next = null;
 | 
			
		||||
            random = null;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class Solution
 | 
			
		||||
    {
 | 
			
		||||
        private readonly List<Node> _nodes = new List<Node>();
 | 
			
		||||
 | 
			
		||||
        public Node CopyRandomList(Node head)
 | 
			
		||||
        {
 | 
			
		||||
            _nodes.Clear();
 | 
			
		||||
 | 
			
		||||
            Node newHead = null;
 | 
			
		||||
            Node newNow = null;
 | 
			
		||||
            Node now = head;
 | 
			
		||||
 | 
			
		||||
            while (now != null)
 | 
			
		||||
            {
 | 
			
		||||
                Node newNode = new Node(now.val);
 | 
			
		||||
                now.val = _nodes.Count;
 | 
			
		||||
                newNode.random = now.random;
 | 
			
		||||
                _nodes.Add(newNode);
 | 
			
		||||
 | 
			
		||||
                if (newHead == null)
 | 
			
		||||
                {
 | 
			
		||||
                    newHead = newNode;
 | 
			
		||||
                    newNow = newNode;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    newNow.next = newNode;
 | 
			
		||||
                    newNow = newNode;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                now = now.next;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            newNow = newHead;
 | 
			
		||||
 | 
			
		||||
            while (newNow != null)
 | 
			
		||||
            {
 | 
			
		||||
                if (newNow.random != null)
 | 
			
		||||
                {
 | 
			
		||||
                    newNow.random = _nodes[newNow.random.val];
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                newNow = newNow.next;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return newHead;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Submission codes end here
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user