2014-04-01 4 views
0

연결된 목록을 만들고 1-100으로 채우고 싶습니다. 그 후에 홀수를 목록에서 실제로 제거하지 않고 모든 짝수를 인쇄 한 다음 다시 짝수를 인쇄하고 두 번 인쇄합니다. 이 일이 끝나면 연결된 목록에서 홀수를 제거하고 목록을 인쇄합니다. 내가 언급 한 마지막 단계는 내가 매달린 부분이다. 다른 모든 것은 잘 작동하지만, 제 제거 방법은 1을 제외한 모든 홀수를 제거합니다. 내 주 방법에서 노드 % 2에 포함 된 숫자가 0이면 노드를 제거하는 if 문을 사용합니다. 첫 번째 노드를 제외한 모든 노드에서 작동합니다. 네가 내게 줄 수있는 도움에 대해 고마워. 내 코드는 다음과 같습니다.제거 방법을 사용하여 연결된 목록의 첫 번째 노드를 제거하는 방법

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

index의 값이 0 때 귀하의 remove 방법은 실제로 작동하지 않습니다 .. 때문에 모두 당신의 nodeprevfront으로 초기화되고 i<index 조건이 거짓 때문에 루프가 실행되지 않습니다. 그래서 당신은 당신을 감사합니다,

+0

제안이 일 ...

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

가 도움이 희망 .. index=0 문제가 당신의 remove 방법의 시작에서 다음 행를 해결 추가의 경우에 다른 조건을 추가해야 . – Robert

관련 문제