//Xóa một phần tử ở đầu danh sách đơn SL
 static void DeleteFirst_S()
 {
     if (SL != null)
     {
         SL = SL.Next;
     }
 }
 //Xóa phần tử chứa giá trí x trong danh sách đơn trả về giá trị true nếu xóa được không thì trả về false
 static bool Remove_S(int x)
 {
     if (SL != null)
     {
         if (SL.Info == x)//nếu giá trị đầu tiên chứa giá trị x thì thoát
         {
             SL = SL.Next;
             return(true);
         }
         else
         {
             Node_S Sq = SL;
             while (Sq.Next != null)
             {
                 if (Sq.Next.Info == x)
                 {
                     break;
                 }
                 Sq = Sq.Next;
             }//Sq trỏ phần tử trước phần tử cần xóa
             if (Sq.Next != null)//Sq trở tới phần tử trước phần tử cần xóa
             {
                 Sq.Next = Sq.Next.Next;
                 return(true);
             }
         }
     }
     return(false);
 }
        //Tìm phần từ chứa giá trị x trong danh sách đơn SL không thì trả về null
        static Node_S Find_S(int x)
        {
            Node_S Sq = SL;

            while (Sq != null)
            {
                if (Sq.Info == x)
                {
                    return(Sq);
                }
                Sq = Sq.Next;
            }
            return(null);
        }
        //Duyệt in ra toàn bộ danh sách đơn SL
        static void Traver_S()
        {
            if (SL == null)
            {
                Console.WriteLine("Danh sach rong");
                return;
            }
            Node_S Sq = SL;//tạo 1 con trỏ trung gian duyện danh sách SL

            while (Sq != null)
            {
                Console.WriteLine("Info : {0}", Sq.Info);
                Sq = Sq.Next;
            }
        }
        static Node_D RL = null; // Initial, RL quản lý danh sách liên kết kép ở phía phải
        #region Danh sách liên kết đơn SL
        //Bổ xung một phần tử vào đầu danh sách đơn SL
        static void AddFirst_S(int x)
        {
            Node_S Sp = new Node_S();

            /*
             * Tạo một nút có cấu trúc Node_s được trỏ bởi Sp(nghĩa là đỉa chỉ của node nằm trong con trỏ Sp)
             * Địa chỉ của node là một số nguyên
             * Sp là con trỏ, là một biến đặc biệt chứa địa chỉ của biến
             * Một biến bất kì phải có địa chỉ
             * Máy tính truy cập theo địa chỉ
             * để truy cập một biến cần dùng tên biến hoặc địa chỉ của biến
             * Địa chỉ của biến có thể nằm ở trong con trỏ
             */
            Sp.Info = x;//truy cập(gắn =x) vào trường info của node vừa tạo bằng con trỏ sp
            Sp.Next = SL;
            SL      = Sp;
        }
 //Xóa một phần từ ở cuối danh sách đơn SL
 static void DeleteLast_S()
 {
     if (SL != null)
     {
         if (SL.Next == null)
         {
             SL = null;
         }
         else
         {
             Node_S Sq = SL;//tạo 1 con trỏ trung gian duyện danh sách SL
             while (Sq.Next.Next != null)
             {
                 Sq = Sq.Next;
             }
             Sq.Next = null;
         }
     }
 }
        //Bổ xung một phần tử vào cuối danh sách đơn SL
        static void AddLast_S(int x)
        {
            Node_S Sp = new Node_S();

            Sp.Info = x;
            Sp.Next = null;
            if (SL == null)
            {
                SL = Sp;
            }
            else
            {
                Node_S Sq = SL;//tạo 1 con trỏ trung gian duyện danh sách SL
                while (Sq.Next != null)
                {
                    Sq = Sq.Next;
                }
                //Sq trỏ vào phần tử cuối danh sách
                Sq.Next = Sp;
            }
        }
 //Xóa toàn bộ danh sách đơn
 static void Clear_S()
 {
     SL = null;
 }