예제 #1
0
        public async Task <ListNode> DeepCopy(ListNode head)
        {
            Debug.Assert(head.Previous == null, "Head node should be passed to this method.");
            var nodePacker   = new ListNodePacker();
            var cloningTasks = GetAllNodes(head)
                               .Select(node => nodePacker.ToPackedListNode(node))
                               .Select(node => nodePacker.RestoreNodeAsync(node));
            var clonedNodes = await Task.WhenAll(cloningTasks);

            return(clonedNodes[0]);
        }
예제 #2
0
        public async Task <ListNode> Deserialize(Stream s)
        {
            var buffer = await ReadBufferFromStream(s);

            var nodePacker = new ListNodePacker();
            var nodesTasks = ReadPackedNodesFromBuffer(nodePacker, buffer)
                             .Select(node => nodePacker.RestoreNodeAsync(node));
            var nodes = await Task.WhenAll(nodesTasks);

            return(nodes[0]);
        }