//method to display sorted track list in listbox
        private void DisplayTracks()
        {
            lbTracks.Items.Clear();
            Node <string> temp = sortedTrackList.getHead();

            while (temp != null)
            {
                lbTracks.Items.Add(temp.getName());
                temp = temp.next;
            }
        }
 //method to add user selected files (of certain audio formats) to listbox
 //and to the linked list, while also sorting them with a merge sort
 private void BtnAddTracks_Click(object sender, EventArgs e)
 {
     //use open file dialog
     using (OpenFileDialog fileDialog = new OpenFileDialog()
     {
         Multiselect = true,
         //InitialDirectory = ".\",
         //accepted files types
         Filter = "WMA|*.wma|WMV|*.wmv|WAV|*wav|MP3|*.mp3|MP4|*.mp4|MKV|*.mkv"
     })
     {
         //if the user presses 'ok'
         if (fileDialog.ShowDialog() == DialogResult.OK)
         {
             //set the sorted track list to the unsorted - used if user add files multiple times
             //this serves to correct the node values of 'next' and 'prev' in the unsorted list
             trackList = sortedTrackList;
             //loop through the selected files and add as nodes to linked list
             foreach (string fileName in fileDialog.FileNames)
             {
                 //put this info into a file object
                 FileInfo file = new FileInfo(fileName);
                 //obtain path and name information as strings
                 string name = Path.GetFileNameWithoutExtension(file.FullName);
                 string path = file.FullName;
                 //if list isn't empty, check for dupes
                 if (trackList.GetLengthOfList() > 0)
                 {
                     Node <string> checkDupe = trackList.CheckForDuplicate(name);
                     if (checkDupe == null) //not not null, isnt added
                     {
                         //call add method
                         trackList.AddLastNode(name, path);
                     }
                 }
                 else
                 {
                     trackList.AddLastNode(name, path);
                 }
             }
             //null a new head object (useful if user adds files multiple times)
             Node <string> newHead = null;
             //set the new head object to the first place of the sorted list
             newHead = trackList.MergeSort(trackList.getHead());
             //clear the sorted list (in case of user adding songs multiple times)
             sortedTrackList = new TrackLinkedList <string>();
             //use a temp node object to traverse the sorted head nodes and store them in the sorted linked list
             Node <string> temp = newHead;
             while (temp != null)
             {
                 sortedTrackList.AddLastNode(temp.getName(), temp.getPath());
                 temp = temp.next;
             }
             //display sorted tracks in listBox
             DisplayTracks();
             //set current song to first in list
             currentTrack = newHead;
         }
     }
     toolStripStatusLabel.Text = "Success! Tracks have been added";
 }