2016-10-12 2 views
0

을 결합 I 다음 목록이 있습니다반전 및 목록

목록 1 = 나는이 포함 된 목록을 만들려고 노력하고 1,2,3,4,5,6

다음

목록 C = 그러나 1,6,2,5,3,4

, 나는 그것을 수행하는 방법을 알아낼 수 없습니다. 나는 6을 반복하는 방법을 알고 있지만 마지막 숫자로 돌아가 뒤로 거는 방법을 모른다. ListIterator는 뒤로 이동하는 데 사용할 수 있지만 여전히 파악할 수는 없다는 것을 알고 있습니다.

이 내가 원본을 추가 한 것입니다, 난 그냥 뒤로 반복하는 방법을 이해하지 않습니다

public static void q(Set<String>list1) 
{ 
    Set<String>combined = new HashSet(); 
    Iterator<String> forward = list1.iterator(); 
    Iterator <String> backwards = list1.iterator(); 

    for (int i=0; i<list1.size(); i++) 
    { 
     combined.add(forward.next()); 

     //code to go backwards 
    } 
} 
+0

코드가있다 :

은 어떻게리스트 반복자를 사용 하는가? – f1sh

+0

내가 가지고있는 것을 추가했습니다. 그러나 전혀 유용하지 않습니다. 나는 뒤를 반복하는 법을 모른다. @ f1sh – ZeldaX

+0

특정 순서를 원할 경우'Set'은 실제로 올바른 데이터 유형이 아닙니다. –

답변

1

간단한 너 한테이 될 것

1) 두 위치, i =0를 들어 사용 컨텐츠 목록 중간에 가로 지르는 동안 증가하고 ij 위치를 사용하여 감소합니다

2) 새 목록에 요소를 추가하기위한 j = size-1

Integer []aa=new Integer[]{1,2,3,4,5,6}; 
List<Integer> list =Arrays.asList(aa); 
int n=list.size(); 
List<Integer> list2 =new ArrayList<>(); 
    for (int i = 0,j=list.size()-1; i <n/2 ; i++,j--) { 
     list2.add(list.get(i)); 
     list2.add(list.get(j));   
    } 
// if(n%2!=0) list2.add(list.get(n/2)); // un-comment this , to handle 
              // odd list size too ,dynamism 

list2.forEach(i->System.err.print(i+" ")); 

출력 :

1 6 2 5 3 4 
+0

아무도 대답을 수락하지 않았거나 심지어 상향 투표 한 이유가 없습니다. 네가보기에는 꽤 좋아 보인다. 그래서 내가 그것에 대해 할 수있는 일을 시키십시오. – GhostCat

+0

@GhostCat 친구와 어쩌면 OP가 혼란 스럽거나 바쁘다 : P –

1

당신은 같은 것을 할 수있는, 당신은 단순히 두 번째 인덱스에 첫 번째 목록의 마지막 요소를 넣어 원하는 가정 : 물론

List<Integer> input = Arrays.asList(1, 2, 3, 4, 5, 6); 

// create new list that initially contains first and last element of input list 
List<Integer> output = new ArrayList<>(Arrays.asList(input.get(0), input.get(input.size()-1))); 

// now iterate the "in between" input elements and add them to output 
for (int i=1; i < input.size() -1 ; i++) { 
    output.add(input.get(i)); 
} 

System.out.println("in: " + input); 
System.out.println("out: " + output); 

을, 위의 내용은이 작업을 수행하는 한 가지 방법 일뿐입니다. 많은 다른 사람이 있습니다

1

정확히 무엇을 찾고 코드가 파손되었는지 확실하지 않습니다. 자바 목록으로

List<Integer> intergers = new ArrayList<>(); 
for(int i = 1; i < 7; i++) { 
    if(i < 6) { 
     intergers.add((i-1), i); 
    } else { 
     intergers.add(1, i); //when i is 6 place it in the second index     
    } 
} 
System.out.println("List: " + intergers.toString()); 

는 인덱스를 선택 할 수 있으며 해당 인덱스에 값이 있으면 값이 아니라 다음 인덱스로 푸시 : 당신은 시도 할 수 있습니다. 그것은 내가 생각할 수있는 가장 단순한 것입니다. 이것은 인쇄 것입니다 :

목록 : [1, 6, 2, 3, 4, 5]

+0

왜 아무 대답도 받아 들여지지 않았거나 upvoted되지 않았다. 네가보기에는 꽤 좋아 보인다. 그래서 내가 그것에 대해 할 수있는 일을 시키십시오. 하지만 : * x *를 int 카운터의 이름으로 사용하는 것은 실제로 나쁜 습관입니다. 그런 색인을 위해 i, j, k를 더 잘 사용하십시오! – GhostCat

+0

'i'를 사용하도록 업데이트되었습니다. 또한 'x'는 나쁜 습관이라고 들었습니다. 감사합니다. – thekodester

+0

아마도 더 암시적인 관습입니다. 수학을 할 때, "정수"를 다룰 때 당신은 전형적으로 i, j를 사용하는 반면, 유리수를 다룰 때는 x, f (x) 등을 사용합니다. 하나는 x, y, z, ...를 다중 희미한 배열을 반복 할 때 인덱스로 사용하도록 유혹 될 수 있습니다. – GhostCat

1

이가 문제를 해결하는 것이 아니라, 오히려 어떻게하면 ListIterator을 보여 당신이 그것을 알아낼 수 없었기 때문에 거꾸로 가기 위해 사용할 수 있습니다.

List<Integer> list = new ArrayList<>(); 
for (int n = 1; n <= 6; n++) { // Add 1, 2, ... 6 to list 
    list.add(n); 
} 

ListIterator it = list.listIterator(list.size()); 
while (it.hasPrevious()) { 
    System.out.println(it.previous()); 
} 

ListlistIterator 방법은 매개 변수로 시작하는 인덱스를 지정할 수 있습니다. ListIteratorhasPrevious 메서드는 이전 요소가 있는지 확인합니다 (자체 설명 가능). ListIteratorprevious() 메서드는 목록의 이전 요소를 반환하고 커서 위치를 뒤로 이동합니다.

을 사용하면 next()previous()을 각각 사용하여 앞뒤로 갈 수 있습니다.

또는 문에 대한을 사용하는 대신에 ... ListIterator

for (int i = list.size() - 1; i >= 0; i--) { 
    System.out.println(list.get(i)); 
} 
+0

아무도 대답을 수락하지 못했거나 상향 투표 한 이유가 없습니다. 네가보기에는 꽤 좋아 보인다. 그래서 내가 그것에 대해 할 수있는 일을 시키십시오. – GhostCat

1

를 사용하여 난 당신이 정말 당신이 목록에 대해 얘기했다 주어진 설정을 원한다면 확실하지 않다. 이것은 목록 iterator를 명시 적으로 사용하지 않고도 비슷하게 동작합니다. http://www.java2s.com/Tutorial/Java/0140__Collections/ListIteratorInreverseorder.htm

public static List<Integer> interleaveFrontBack(List<Integer> list) { 

    if (list.size() <= 2){ 
     return new LinkedList<Integer>(list); 
    } 

    List interleaved = new LinkedList<Integer>(); 
    int end = list.size() - 1; 
    int front = 0; 

    while (end > front){ 
     interleaved.add(list.get(front++)); 
     interleaved.add(list.get(end--)); 
    } 

    // if odd sized list need to add last element 
    if (end == front){ 
     interleaved.add(list.get(front)); 
    } 

    return interleaved; 
} 
+0

아무도 대답을받지 못했거나 심지어 상향 투표 한 이유가 없습니다. 네가보기에는 꽤 좋아 보인다. 그래서 내가 그것에 대해 할 수있는 일을 시키십시오. – GhostCat