Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections.Generic;
- using System.Linq;
- namespace JonsAnswers
- {
- class LinkedListNode
- {
- public LinkedListNode Next { get; set; }
- public LinkedListNode Other { get; set; }
- public string Value { get; set; }
- }
- class Program
- {
- static LinkedListNode GenerateSpecialLinkedList()
- {
- LinkedListNode root = new LinkedListNode();
- LinkedListNode itemOne = new LinkedListNode();
- LinkedListNode itemTwo = new LinkedListNode();
- LinkedListNode itemThree = new LinkedListNode();
- LinkedListNode itemFour = new LinkedListNode();
- root.Next = itemOne;
- itemOne.Next = itemTwo;
- itemTwo.Next = itemThree;
- itemThree.Next = itemFour;
- itemFour.Next = null;
- root.Value = "I";
- itemOne.Value = "Formed";
- itemTwo.Value = "A";
- itemThree.Value = "Sentence";
- itemFour.Value = "Here.";
- root.Other = itemThree;
- itemOne.Other = itemOne;
- itemTwo.Other = root;
- itemThree.Other = itemFour;
- itemFour.Other = itemTwo;
- return root;
- }
- static LinkedListNode ReturnCopy(LinkedListNode list)
- {
- List<LinkedListNode> nodeList = new List<LinkedListNode>();
- LinkedListNode root = list;
- while (true)
- {
- nodeList.Add(root);
- root = root.Next;
- if (root == null)
- break;
- }
- // Weirdly named I know.
- List<int> referenceFlags = nodeList.Select(node => nodeList.IndexOf(node.Other)).ToList();
- List<LinkedListNode> newNodeList = new List<LinkedListNode>();
- newNodeList.AddRange(from x in Enumerable.Range(0, nodeList.Count) select new LinkedListNode());
- for (int i = 0; i < nodeList.Count; i++)
- {
- newNodeList[i].Other = newNodeList[referenceFlags[i]];
- newNodeList[i].Value = nodeList[i].Value;
- if (i == nodeList.Count - 1)
- break;
- newNodeList[i].Next = newNodeList[i + 1];
- }
- return newNodeList.First();
- }
- static void Main(string[] args)
- {
- LinkedListNode root = GenerateSpecialLinkedList();
- LinkedListNode copy = ReturnCopy(root);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement