2014-04-01 32 views
0

我想創建一個鏈接列表,然後用1-100填充它。之後,我打印出所有偶數,但實際上並沒有從列表中刪除奇數,然後再打印出偶數,但將它們加倍。在這些事情之後,我從鏈表中刪除奇數並打印出列表。我提到的最後一步是我掛斷了。一切工作正常,只是我的刪除方法刪除除1以外的所有奇數。在我的主要方法中,我使用if語句,說明節點%2中包含的數字是否等於零,刪除節點。它適用於除第一個節點以外的每個節點。謝謝你們給我的任何幫助。我的代碼如下。如何使用刪除方法刪除鏈接列表中的第一個節點

import java.util.*; 

/* 
* My ListNode class 
*/ 
class ListNode<Integer> { 
private Integer item; 
private ListNode<Integer> next; 

public ListNode(Integer item) { 
    this.item = item; 
    next = null; 
} 

public ListNode(Integer item, ListNode<Integer> next) { 
    this.item = item; 
    this.next = next; 
} 

public Integer getItem() { 
    return item; 
} 

public ListNode<Integer> getNext() { 
    return next; 
} 

public void setItem(Integer item) { 
    this.item = item; 
} 

public void setNext(ListNode<Integer> next) { 
    this.next = next; 

} 
} 

/* 
* My LinkedList class 
*/ 
class LinkedList<Integer> { 
public ListNode<Integer> front; 

public LinkedList() { 
    front = null; 
} 

public boolean isEmpty() { 
    return front == null; 
} 

public boolean contains(int target) { 
    for (ListNode<Integer> node = front; 
      node != null; 
      node = node.getNext()) { 
     if (node.getItem().equals(target)) { 
      return true; 
     } 
    } 
    return false; 
} 

public int size() { 
    int count = 0; 
    for (ListNode<Integer> node = front; 
      node != null; 
      node = node.getNext()) { 
     count++; 
    } 
    return count; 
} 

public String toString() { 
    String result = "("; 
    for (ListNode<Integer> node = front; 
      node != null; 
      node = node.getNext()) { 
     result += node.getItem() + " "; 
    } 
    return result + ")"; 
} 

public Integer get(int index) { 
    ListNode<Integer> node = front; 
    for (int i = 0; i < index; i++) { 
     node = node.getNext(); 
    } 
    return node.getItem(); 
} 

public void set(int index, Integer target) { 
    ListNode<Integer> node = front; 
    for (int i = 0; i < index; i++) { 
     node = node.getNext(); 
    } 
    node.setItem(target); 
} 

public void add(int index, int target) { 
    if (isEmpty()) { 
     front = new ListNode(target); 
    } else { 
     ListNode last = front; 
     while (last.getNext() != null) { 
      last = last.getNext(); 
     } 
     last.setNext(new ListNode(target)); 
    } 
} 

public Integer remove(int index) { 
    ListNode<Integer> node = front; 
    ListNode<Integer> prev = front; 
    for (int i = 0; i < index; i++) { 
     prev = node; 
     node = node.getNext(); 
} 
    prev.setNext(node.getNext()); 
    return node.getItem(); 
} 
} 
public class LinkedListTest { 
//interface Removal { 
    //Integer remove (Integer item); 
//} 
public static void main(String[] args) { 
    LinkedList<Integer> list = new LinkedList<Integer>(); 

    System.out.println(list); 

    System.out.println("The list size is " + list.size());  
    System.out.println(); 

    /* 
    * This adds the numbers 1 through 100 to a LinkedList 
    */ 
    for (int i = 1; i <= 100; i++) 
     list.add(0, i); 

    System.out.println(list); 


    System.out.println("The list size is " + list.size()); 
    System.out.println(); 

    /* 
    * This prints out only even numbers by excluding indexes that are even, 
    * because all the even numbers are held in the odd numbered indexes, thus 
    * index 0 is 1 but index 1 is 2, index 3 is 4 
    */ 
    for (int i = 0; i < list.size(); i++) 
     if (i % 2 == 1) { 
      System.out.print(list.get(i) + " "); 
     } 

    System.out.println(); 

    System.out.println("The list size is " + list.size()); 
    System.out.println(); 

    /* 
    * This doubles even numbers      
    */ 
    for (int i = 0; i < list.size(); i++) 
     if (i % 2 == 1) { 
      int result = list.get(i) * 2; 
     System.out.print(result + " "); 
     } 
    System.out.println(); 
    System.out.println("The list size is " + list.size()); 
    System.out.println(); 

    for (int i = 0; i < list.size(); i++) 
      if (list.get(i) % 2 == 1) { 
       list.remove(i); 
      } 

    System.out.print(list); 
    System.out.println(); 
    System.out.println("The list size is " + list.size()); 
    System.out.println(); 
    /* 
    * These contain methods only work for the first list created 
    */ 
    System.out.println("Does the list contain 32? " + list.contains(32)); 

    System.out.println("Does the list contain 33? " + list.contains(33)); 

} 
} 

回答

1

remove方法並不實際工作時的index價值0 ..因爲無論你nodeprev被初始化爲front並沒有被執行的循環,因爲i<index條件是假的。所以,你必須添加其他條件的index=0remove方法的出發加上幾行解決問題的情況下..

if(index==0){ 
    ListNode<integer>temp=front; 
    front=front.getNext(); 
    return temp.getItem(); 
} 

希望它幫助...

+0

你的建議的工作,謝謝。 – Robert