Advertisement
Guest User

Untitled

a guest
Sep 24th, 2017
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.01 KB | None | 0 0
  1. using System.Collections.Generic;
  2. using System.Linq;
  3.  
  4. namespace JonsAnswers
  5. {
  6.     class LinkedListNode
  7.     {
  8.         public LinkedListNode Next { get; set; }
  9.         public LinkedListNode Other { get; set; }
  10.         public string Value { get; set; }
  11.     }
  12.  
  13.     class Program
  14.     {
  15.         static LinkedListNode GenerateSpecialLinkedList()
  16.         {
  17.             LinkedListNode root = new LinkedListNode();
  18.             LinkedListNode itemOne = new LinkedListNode();
  19.             LinkedListNode itemTwo = new LinkedListNode();
  20.             LinkedListNode itemThree = new LinkedListNode();
  21.             LinkedListNode itemFour = new LinkedListNode();
  22.  
  23.             root.Next = itemOne;
  24.             itemOne.Next = itemTwo;
  25.             itemTwo.Next = itemThree;
  26.             itemThree.Next = itemFour;
  27.             itemFour.Next = null;
  28.  
  29.             root.Value = "I";
  30.             itemOne.Value = "Formed";
  31.             itemTwo.Value = "A";
  32.             itemThree.Value = "Sentence";
  33.             itemFour.Value = "Here.";
  34.  
  35.             root.Other = itemThree;
  36.             itemOne.Other = itemOne;
  37.             itemTwo.Other = root;
  38.             itemThree.Other = itemFour;
  39.             itemFour.Other = itemTwo;
  40.  
  41.             return root;
  42.         }
  43.  
  44.         static LinkedListNode ReturnCopy(LinkedListNode list)
  45.         {
  46.             List<LinkedListNode> nodeList = new List<LinkedListNode>();
  47.  
  48.             LinkedListNode root = list;
  49.  
  50.             while (true)
  51.             {
  52.                 nodeList.Add(root);
  53.  
  54.                 root = root.Next;
  55.  
  56.                 if (root == null)
  57.                     break;
  58.             }
  59.  
  60.             // Weirdly named I know.
  61.             List<int> referenceFlags = nodeList.Select(node => nodeList.IndexOf(node.Other)).ToList();
  62.  
  63.             List<LinkedListNode> newNodeList = new List<LinkedListNode>();
  64.             newNodeList.AddRange(from x in Enumerable.Range(0, nodeList.Count) select new LinkedListNode());
  65.  
  66.             for (int i = 0; i < nodeList.Count; i++)
  67.             {
  68.                 newNodeList[i].Other = newNodeList[referenceFlags[i]];
  69.                 newNodeList[i].Value = nodeList[i].Value;
  70.  
  71.                 if (i == nodeList.Count - 1)
  72.                     break;
  73.  
  74.                 newNodeList[i].Next = newNodeList[i + 1];
  75.             }
  76.  
  77.             return newNodeList.First();
  78.         }
  79.  
  80.         static void Main(string[] args)
  81.         {
  82.             LinkedListNode root = GenerateSpecialLinkedList();
  83.             LinkedListNode copy = ReturnCopy(root);
  84.         }
  85.     }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement