Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so dont bother with any of their useless mail servers here and just use oauth login instead. Thank the nice Russians for causing that. :)

Paste

Pasted as C# by Alex Dunn ( 15 years ago )
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace LinkedStoryList
{
    class StoryList : IList
    {
        // Attributes
        private LinkedNode headNode;
        private LinkedNode tailNode;
        private int count;

        #region IList Members

        public void Add(string data)
        {
            // Make the new node
            LinkedNode newNode = new LinkedNode(data);

            // Check the head node
            if (headNode == null)
            {
                headNode = newNode;
                tailNode = newNode;
            }
            else
            {
                // Link to the previous node
                newNode.SetPrevious(tailNode);

                // Add a new thing to the end of the list
                tailNode.SetNext(newNode);
                tailNode = newNode;  
            }

            // Increment the count
            count++;
        }

        public void Add(string data, int index)
        {
            // Make the new node
            LinkedNode newNode = new LinkedNode(data);

            // Check for a valid index
            if (index < 0 || index > count - 1)
            {
                // Tell the user about faulty input
                Console.WriteLine("You entered a faulty spot in the list! Added to the end.");
                // Add data to the end
                Add(data);
            }

            // Create a temporary search node to get to the right spot in the list
            LinkedNode searchNode = headNode;

            // Loop through to get to the right spot
            for (int i = 0; i < index; i++)
            {
                searchNode = searchNode.GetNext();
            }
            
            // Link everything
            searchNode.SetPrevious(newNode);
            newNode.SetNext(searchNode);
            searchNode = searchNode.GetPrevious();
            newNode.SetPrevious(searchNode);
            searchNode.SetNext(newNode);
            
            // Update the count
            count++;
        }

        public string Remove(int index)
        {
            if (index < 0 || index > count)
            {
                return null;                
            }
            else if (index == 0)
            {
                String oldData = headNode.GetData();
                headNode = headNode.GetNext();
                headNode.SetPrevious(null);
                count--;
                return oldData;                
            }
            else if (index == count)
            {
                String oldData = tailNode.GetData();
                tailNode = tailNode.GetPrevious();
                tailNode.SetNext(null);
                count--;
                return oldData;                
            }
            else
            {
                LinkedNode searchNode = headNode;
                for (int i = 0; i < index; i++)
                {
                    searchNode = searchNode.GetNext();
                }
                LinkedNode previousNode = searchNode.GetPrevious();
                LinkedNode nextNode = searchNode.GetNext();
                previousNode.SetNext(nextNode);
                nextNode.SetPrevious(previousNode);
                count--;
                return searchNode.GetData();                
            }
        }

        public string GetElement(int index)
        {
            if (index < 0 || index > count)
            {
                return null;
            }
            else
            {
                LinkedNode searchNode = headNode;
                for (int i = 0; i < index; i++)
                {
                    searchNode = searchNode.GetNext();
                }
                return searchNode.GetData();
            }
        }

        public int Count
        {
            get { return count; }
        }

        public bool IsEmpty()
        {
            if(headNode.GetData() == null)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        #endregion

        
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LinkedStoryList
{
    /// <summary>
    /// Represents one node in a Linked List
    /// </summary>
    public class LinkedNode
    {

        // Attributes
        private String data;   // The data in this linked node
        private LinkedNode next;  // The next node in the list;
        private LinkedNode previous; // The previous node in the list;

        /// <summary>
        /// Default constructor for a Linked Node
        /// </summary>
        public LinkedNode()
            : this(null, null, null)
        {
        }


        /// <summary>
        /// Creates a new Linked Node with data
        /// </summary>
        /// <param name="data">The data to hold in this node</param>
        public LinkedNode(String data)
            : this(data, null, null)
        {
        }


        /// <summary>
        /// Creates a new Linked Node with data that also
        /// knows about other nodes in the chain
        /// </summary>
        /// <param name="data">The data to store in this node</param>
        /// <param name="next">The next node in the chain</param>
        /// <param name="previous">The previous node in the chain</param>
        public LinkedNode(String data, LinkedNode next, LinkedNode previous)
        {
            this.data = data;
            this.next = next;
            this.previous = previous;
        }

        /// <summary>
        /// Gets the next node in the chain
        /// </summary>
        /// <returns>The next node in the chain</returns>
        public LinkedNode GetNext()
        {
            return next;
        }

        /// <summary>
        /// Gets the previous node in the chain
        /// </summary>
        /// <returns>The previous node in the chain</returns>
        public LinkedNode GetPrevious()
        {
            return previous;
        }

        /// <summary>
        /// Gets the data stored in this node
        /// </summary>
        /// <returns>The data stored in this node</returns>
        public String GetData()
        {
            return data;
        }

        /// <summary>
        /// Sets the link to the next node
        /// </summary>
        /// <param name="next">The new next node</param>
        public void SetNext(LinkedNode next)
        {
            this.next = next;
        }

        /// <summary>
        /// Sets the link to the previous node
        /// </summary>
        /// <param name="previous">The new previous node</param>
        public void SetPrevious(LinkedNode previous)
        {
            this.previous = previous;
        }

        /// <summary>
        /// Sets the data for this node
        /// </summary>
        /// <param name="data">The new data for this node</param>
        public void SetData(String data)
        {
            this.data = data;
        }

    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LinkedStoryList
{
    class Program
    {
        static void Main(string[] args)
        {
            StoryList test = new StoryList();
            test.Add("1");
            test.Add("3");
            test.Add("2", 1); 
            Console.WriteLine(test.GetElement(0));
            Console.WriteLine(test.GetElement(1));
            Console.WriteLine(test.GetElement(2));
        }
    }
}

 

Revise this Paste

Your Name: Code Language: