2013-10-29 4 views
0

스택의 특정 요소를 제거하려고하는데 문제가 있습니다. 내 생각은 임시 스택에 요소를 띄우고, 찾고있는 색인을 팝업 한 다음 임시 스택에있는 요소를 기본 스택으로 다시 팝하는 것입니다. 임시 스택을 어떻게 다시 얻을 수 있는지 궁금해합니다. 어떤 도움이라도 대단히 감사하겠습니다.스택의 특정 요소 제거

public E remove(int index) { 
    Stack<E> tmpStack = new Stack<E>(); 
    if (size() == 0) { 
     return null; 
    } else { 
     for (int i = 0; i < index; i++) { 
      tmpStack.push(this.pop()); 
     } 
     return tmpStack.pop(); 
    } 
    while (!tmpStack.isEmpty()) 
     this.push(tmpStack.pop()); 
} 

생각 하시겠습니까? 건배!

답변

2

문제는 마지막 되돌리기 작업 전에 반환되므로 메서드가 제거 된 요소와 함께 코드를 호출하지 않고 반환된다는 것입니다.

당신은 일반적으로 unreachable code 오류가 있지만 스택이 비어있는 경우 while는 (심지어 빈 스택에) 실행되도록 else 지점과 자바 내에서 마지막 while를 동봉하지 않기 때문에 귀하의 경우에없는 사실 그 것이다 컴파일러가이를 감지 할 수 없습니다. 당신은 비슷한해야

:

if (isEmpty()) 
    return null; 
else 
{ 
    for (int i = 0; i < index; i++) 
    tmpStack.push(this.pop()); 

    E removedElement = tmpStack.pop(); 

    while (!tmpStack.isEmpty()) 
    this.push(tmpStack.pop()); 

    return removedElement; 
} 
+0

정확하게 그랬습니다. 도와 주셔서 감사합니다! – Talaria

1

스택의 특정 인덱스에있는 요소에 액세스 스택을 가지고있는 점에 간다. 다른 고려 사항은 인덱스가 스택의 맨 위 부분을 참조하는지 여부를 포함합니다. 다른 요소에서 언급했듯이 요소를 원래 스택에 다시 넣기 전에 반환하는 것이 문제입니다. 현재 구현에서 오류가 발생하므로 인덱스가 스택의 현재 크기보다 큰 경우도 고려해야합니다. (Java StackEmptyStackException을 던집니다.)

+0

포인트가 유효하고 최선의 데이터 구조가 아닌 스택에 대해 잘 받아 들여서 이런 식으로하고 싶습니다. 인덱스가 스택보다 큰 경우 뛰어난 노트. 고맙습니다! – Talaria