2015-10-03 89 views
0

我添加元素到我的堆棧並在DataGridView中打印它們。它工作正常。但我無法刪除最後一個元素。你能用我的方法幫助我嗎?從鏈表中刪除最後一個節點c#

在這裏,我如何尋找最後一個節點:

public void RemoveLast() 
     { 

      STACKnode current = head, last; 
      while (current != null) 
      { 
       last = current; 
       current = current.next; 
      } 
      last = null; 
     } 

last = null不會刪除節點。但是,如果我嘗試更改值last.item,它將被更改。我的鏈接列表的

全碼:

public class STACKnode 
    { 
     public STACKnode next; 
     public int item; 
    } 

    public class LinkedList 
    { 
     private STACKnode head; 
     public int currentItem; 

     public void AddLast(int item) 
     { 
      if (head == null) 
      { 
       head = new STACKnode(); 

       head.item = item; 
       head.next = null; 
      } 
      else 
      { 
       STACKnode newSTACKnode = new STACKnode(); 
       newSTACKnode.item = item; 
       STACKnode current = head; 
       while (current.next != null) 
       { 
        current = current.next; 
       } 

       current.next = newSTACKnode; 
      } 
     } 
     public void RemoveLast() 
     { 

      STACKnode current = head, last; 
      while (current != null) 
      { 
       last = current; 
       current = current.next; 
      } 
      last = null; 
     } 
     public void printAllNodes(DataGridView dataGridView1) 
     { 
      STACKnode current = head; 
      int i = 0; 
      dataGridView1.RowCount = 1; 
      while (current != null) 
      { 
       dataGridView1.Rows.Add("" + current.item); 
       current = current.next; 
       i = i + 1; 
      } 
     }} 

對不起我的英語不好

回答

2

通過分配零到最後,你只是改變這個變量的值。你應該做的是改變它之前的節點的「下一個」屬性,因此它們之間的鏈接將會中斷,從而有效地刪除最後一個項目。這應該工作:

public void RemoveLast() 
    { 
     STACKnode current = head, last; 

     if (head == null) return; 
     if (head.next == null){ 
      head = null; 
      return; 
     } 

     while (current.next != null) 
     { 
      last = current; 
      current = current.next; 
     } 
     last.next = null; 
    } 

編輯:添加一個空列表和一個節點列表的情況。