2012-03-27 3 views
1

나는 자바 테스트를 위해 공부하고 있었고, 나는 숫자의 스택을 가지고있는 운동을 발견했다. (즉, 2-4-1-5-3, 3 개를 엿볼 수있는), 그리고 원형의 문자 목록 (즉, a-> d-> c-> b-> e->, 첫 번째 노드)이 스택은 3입니다, 나는 간단한 목록 char 번호 3을 삽입해야합니다. 이것은 c입니다. 따라서 문제는 보조 목록이나 보조 스택과 같은 보조 구조를 사용하지 않고 연습을 완료해야한다는 것입니다. 제 3의 숫자와 5의 숫자를 잃지 않고 보조 구조에 배치하지 않고 스택에서 숫자 1에 도달하는 방법에 대해 의심의 여지가 있습니다.자바에서 동적 구조를 주문하는 법

미리 감사드립니다.

+0

음, – trutheality

+0

왜 당신은 스택에있는 값을 보존해야합니까 ... 당신이 어딘가에 넣어해야하고, 사용할 수있는 유일한 구조는 목록입니다? 과제를 올바르게 이해하고 있다면 일단 스택 값을 사용하여 목록에 색인을 작성하면 완료되고 잊어 버릴 수 있습니다. 즉, 스택이 비게 될 때까지'result.append (list.get (stack.pop()))'를 반복하십시오. 그게 잘못된거야? – jpm

+0

@jpm 예, 목록에 할당 된 문자를 삽입합니다. 값은 필요 없지만 삽입 할 첫 번째 문자는 1과 같은 문자 여야합니다.이 경우에는 C이지만 사용할 수는 없습니다. 나중에 그 문자를 삽입해야하기 때문에 숫자 3과 5를 잃게됩니다. – Jmdjorgeek

답변

0

재귀 함수를 작성하고 목록의 스택을 사용

+0

무엇이 반환됩니까?내 목록에 스택을 사용하면 무엇을 의미합니까? chars를 스택으로, 정수를리스트로 옮긴다. 특정 케이스에만 작동하는 – Jmdjorgeek

0

전 C에게

수 있음 내가 오해 당신의 excersize하지만입니다 간단한 목록 문자 번호 3에 삽입해야 특정 (빈) 노드 수를 가진 목록을 생성 할 수 있습니다. 얼마나 많은 노드가 있는지 이미 알고 있습니다.
예. 스택의 첫 번째 번호가 3이면 결과 목록의 세 번째 노드에 c을 삽입하십시오.

각 노드를 입력 한 후에 목록이 정렬됩니다.

+0

, 일반적인 방법으로 필요합니다. – Jmdjorgeek

+0

하지만 일반적입니다. 스택을 팝합니다. 목록에서 해당하는 문자를 가져온 다음 팝업 값으로 표시된 노드에 삽입합니다. 팝업으로 값을 인덱스로 사용하고 완료 될 때까지 삽입합니다. – Cratylus

0

재귀를 사용하여 호출 스택에 로컬로 저장할 수 있습니다.

List<Character> charList; 

func() { 
    Stack<Integer> indexList = new Stack<Integer>(); 
    indexList.addAll(Arrays.asList(2,4,1,5,3)); 
    charList = new ArrayList<Character>(); 
    charList.addAll(Arrays.asList('a','d','c','b','e')); 

    recurse(indexList,0); 

    for(char c : charList) { 
     System.out.println(c); 
    } 
} 

private void recurse(Stack<Integer> indexList, int index){ 
    int indexChar = indexList.pop(); 
    char retChar = charList.get(indexChar -1); 
    if(!indexList.isEmpty()) { 
     recurse(indexList, (index + 1)); 
    }  
    charList.set(index, retChar); 
} 
관련 문제