2017-02-22 4 views
-3
내가 예를 들어 LinkedList의 임의의 n 번째 노드를 삭제하는 방법을 알고 싶습니다

:제거/LinkedList의 자바에있는 n 번째 노드를 삭제

1-2-3-4-5-6- 후 상관 없음 제거 = 2 : 1-3-5- 또는 n = 3 : 1-2-4-5

감사합니다!

+0

.remove (인덱스)가 작동하지 않습니다 ? – Loc

+0

Javadoc : [remove (int index)] (http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html#remove (int)) –

+1

inbuilt 클래스를 사용하지 않는 경우 'LinkedList' 그러면이 링크가 도움이 될 것입니다. (n> 2로 일반화하면됩니다) : http://www.geeksforgeeks.org/delete-alternate-nodes-of-a-linked-list/ –

답변

1

는 자바 8에있는 경우 다음 않는 :

linkedList.removeIf((i) -> i % n == 0); 

예 :

int n = 2; 
LinkedList<Integer> ll = new LinkedList<>(Arrays.asList(1,2,3,4,5,6)); 

ll.removeIf((i) -> i % n == 0); 
System.out.println(ll); 
+0

우리는 여전히 LinkedList를 사용할 수 없습니다. 우리는 linkedlist를 만듭니다. – user154

0

나는 혼란은 제거 할 것을 명확하게하지 않은 사실에서 나온 생각 처음으로 목록에 있었으므로 매 n 번째 요소가 있으므로이 질문에 이유가 표시되어 있다고 생각합니다.

그러나 여기 그것을하는 방법 중 하나입니다 :

public class ListRemover<T> { 
    public void removeEvery(int n, List<T> list) { 
     int i = 1; 
     int removeFrom = n - 1; 
     while (removeFrom < list.size()) { 
      list.remove(removeFrom); 
      ++i; 
      removeFrom = n * i - i; 
     } 
    } 
} 

그리고 여기 증명마다 두 번째와 ebery 셋째 제거를위한 시험 작동합니다 :

public class ListRemoverTest { 
    @Test 
    public void shouldRemoveEverySecondElement() throws Exception { 
     List<Integer> intList = IntStream.range(1, 10).boxed().collect(toList()); 
     new ListRemover<Integer>().removeEvery(2, intList); 
     assertEquals(Arrays.asList(1, 3, 5, 7, 9), intList); 
    } 

    @Test 
    public void shouldRemoveEveryThirdElement() throws Exception { 
     List<Integer> intList = IntStream.range(1, 10).boxed().collect(toList()); 
     new ListRemover<Integer>().removeEvery(3, intList); 
     assertEquals(Arrays.asList(1, 2, 4, 5, 7, 8), intList); 
    } 
} 
+0

우리는 여전히 LinkedList를 사용할 수 없습니다. 우리는 linkedlist를 만듭니다. – user154