>source

도움이 필요합니다. 제발 도움이 필요합니다. 대답하려고했지만 문제가 있습니다.

내 질문은 다음과 같습니다.

addatfirstsmaller (T) 메서드를 사용하여 삽입을 구현하여 비교 가능한 배열 a를 정렬합니다.

구현은 위의 방법으로 매우 간단합니다.

1 : DoublinkedList List.Call을 생성하십시오.

2 : 배열을 반복합니다. 각 요소 T에 대해 목록을 목록에 추가하십시오. Lista.addatfirstsmaller (t);

3 : 목록을 반복하고 해당 요소에 해당 요소를 A에 놓습니다. 나는 Addatfirstsmaller (t) 메소드를 가지고있다. 나는 첫 번째 견인 단계에서 시도했지만 3 단계를 어떻게 구현하는지 이해하지 못합니다.

도움이 필요합니다.

enter code here
public void addAtFirstSmaller(T t) {
  //set curr to last node of list
ListNode<T> curr= getLast();
//loop over the list from end to start until we reach the head node or a node with value < t
while(curr != head)
{
    if(curr.element.compareTo(t) < 0) //curr's element < t, exit the loop
        break;
    curr= curr.pre;
}
if(curr== head) //insert t as the first node
{
    addFirst(t);
}
else
{
    //create a new node with next= curr, pre= node previous to curr and element= t
    ListNode<T> node= new ListNode<T>(curr, curr.pre, t);
    //set next of node previous to curr to point to node
    curr.pre.next= node;
    curr.pre= node; //update previous of curr to node
}
}
  enter code here
 public void insertionSort(Comparable[] a) {
 DoublyLinkedList<T> lista= new DoublyLinkedList<T>();
 T  t;
 for(int i= 0; i <a.length; i++) {
     t= (T) a[i];
    lista.addAtFirstSmaller(t);//when I print it, no element found
    lista.iterator();//I have iterator method in my class DoublyLinkedList
     //step 3 Help please
    }
  }

나는 도움을주기를 바랍니다.

  • 답변 # 1

    반복자에서 얻은 요소를 반복하여 배열에 다시 넣으십시오.두 가지 변수가 필요합니다iterator.네가가는 것lista.iterator ()배열에 인덱스 (An.짐마자 인덱스를 0으로 초기화하십시오. 반복자에서 얻은 각 요소에 대해 현재 인덱스의 배열에 넣은 다음 인덱스를 증가시킵니다. 이런 식으로 요소가 저장됩니다A [0],A [1],A [2]등등

    편집 : 반복자가 반복을위한 루프를 제어하게하십시오. 개인적으로 나는 A를 선호합니다동안LOPP, A는 A를 선호합니다...에 대한고리. 인터넷에서 수많은 예제를 찾을 수 있습니다. 검색 엔진을 사용하십시오.

    편집 :이 문자 의이 행이 잘못 보입니다.

       ListNode<T> node= head.next;
    

    당신이 초기화하고있는 것처럼 보입니다.마디목록의 두 번째 노드를 참조하여 첫 번째 노드를 건너 뜁니다.

    편집 : 당신은 두 개의 변수를 가지고 있습니다.Lista....에 당신에 하나가 있습니다본관방법. 그리고 다른 하나가 있습니다삽입의 방법Doublylinkedlist...에 삽입 정렬을 수행 할 때는 숫자를 후자로 채우고 있습니다. 정렬 이후에 전자를 인쇄하고 있습니다. 따라서 정렬 된 목록을 인쇄 할 것으로 기대하지 마십시오. 그러나 내가 올바르게 이해하면 최종 목표는 배열을 정렬하는 것이 었습니다. 그래서 그냥 인쇄하십시오 :

      System.out.println(Arrays.toString(a));
    

    이렇게하면 최종 결과가 필요합니다.

    이 code int ind= 0; iterator ite= lista.iterator (); a [ind]= (비교 가능) ite; IND ++; SE "DoublinkedList $ 1은 java.lang.comparable에 캐스팅 할 수 없음을 예외합니다.

    Rand2021-04-20 08:05:18

    좋은 시작! 이제 루프가 필요합니다. 나는 내 대답이 끝날 때 그것에 대해 몇 가지 문장을 추가했습니다.

    Ole V.V.2021-04-20 08:05:18

    (iter.hasnext ()) {a [ind]= iter.next ()})를 의미합니까?

    Rand2021-04-20 08:05:18

    예, 정확하게! 그리고 루프 내부에서 IND를 증분시킵니다.

    Ole V.V.2021-04-20 08:05:18

    이제 내 code를 봐. 아직 작동하지 않아도 테스트 클래스를 실행할 때 빈 목록을 얻습니다.

    Rand2021-04-20 08:05:18
  • 이전 arrays : 배열 데이터가 표시되지 않습니다
  • 다음 python : 서버에 연결할 때 센서에서 응답 없음