2013-11-01 4 views
0

나는 LinkedLists와 java의 스택에 대해 배우고 문제를 발견했다. 순간에 스택의 맨 위에 객체를 놓는 푸시 기능이 있습니다. 나는 목록에서 링크를 잃어 버리지 않고 그 반대를 수행하고 객체를 맨 아래로 밀어 넣는 방법을 알아 냈습니다.링크 된 목록 스택 맨 아래가 아님

일부 문제는 여기에서 더 잘 이해할 수 있도록 도와 드리겠습니다.

개체 생성자 :

//Variables 
public int planeID;   //unique plane identifier 
public String destination; //destination 
public String airline;  //airline name 
public String aircraft;  //aircraft type 
public double time;   //arrival or departure time 
public Plane next;   //next plane in terminal 

// Plane Constructor 
public Plane (int i, String dest, String airl, String airc, double t) { 

     planeID = i; 
     destination = dest; 
     airline = airl; 
     aircraft = airc; 
     time = t; 

}// END Plane Constructor 

삽입 마지막 항목

공공 무효 insertLast (INT I, 문자열 이명 령, 문자열 airl, 문자열 AIRC, 이중 t) {/ 수정 됨 (하지 작업 코드)/새로운 링크를 만드십시오 비행기 newPlane = 새로운 비행기 (i, dest, airl, airc, t); 평면 임시 = 첫 번째;

while (temp.next != null) { 
    temp = temp.next; 
} 

temp.next = newPlane; 
} 

그리고 목록 내 LinkedList의를 말합니다 마지막으로 푸시,

: 그래서

public void push(int i, String dest, String airl, String airc, double t) // put item on top of stack 
{ 
    theList.insertLast(i, dest, airl, airc, t); 
} 

가, 지금은 새로운 기능을 만들려고 해요, 그것은 가장 적합한 요소를 삽입 할 insertLast을 말할 수 맨 위 대신 목록의 맨 아래에, 그래서 이것을 위해 내 푸시 사용 큐를 수정할 수 있습니다.

편집 : 이 경우 큐를 사용하는 것이 가장 좋습니다.

+1

질문 내용을 삭제하지 마십시오. 우리는 편집을 되 돌리는 과정에서 답변이 여전히 합리적이되도록 진행 중입니다. – Hooked

답변

2

여기에있는 내용은 singly linked list입니다. 항목을이 목록의 끝에 삽입하려면 목록의 마지막 항목까지 완전히 이동 한 후 next 참조에 새 비행기를 지정해야합니다. 목록의 마지막 항목은 next 참조가 null 인 항목입니다.
또는 다른 변형으로 두 개의 링크를 유지할 수 있습니다. 하나는 목록의 첫 번째 항목이고 다른 하나는 마지막 항목입니다. 그렇게하면 목록 끝에 아무 것도 추가 할 필요가 없을 때 끝까지 가야 할 필요가 없습니다. double-ended list이 될 것입니다 (다른 데이터 구조 인 이중 연결 목록과 섞지 마십시오).

+0

나는 노드가 참조를 가지고 있는지 확인해야한다. 그렇지 않다면 : 마지막 노드가 있으므로 새로운 노드에 대한 마지막 노드 참조를 만들어야한다. – Ernusc

+0

@Ernusc 네, 이것은 마지막 요소를 찾는 방법입니다. 'next' 참조는 null입니다. – aga

+0

@aga 제공 한 출처를 읽은 후에 제 질문을 수정하고 코드를 포함 시켰지만 여전히 작동하지 않습니다. 정직하게 이유를 이해하지 못합니다. – Ilja

0

자바를 배우면서 나는 단지 코드를 제공하지 않을 것이므로 의사 코드를 작성했습니다.

function insertLast(item) { 
    tmp = first 
    while (tmp.next != null) { 
     tmp = tmp.next 
    } 
    // now we're at the bottom 
    tmp.next = item 
    item.next = null 
} 

첫 번째 요소에서 무엇 당신이해야 할, null가 될 때까지 .next가 계속 다음 목록의 끝에 새로운 객체에 대한 참조를 추가합니다.

+0

예, 맞습니다. :) – Ernusc

+0

당신이 그것을 자주해야 할 필요가 있다면 정확하지만 끔찍한 디자인입니다. –

+0

효율성이 문제의 일부가 아니 었습니다. 단일 링크 된 목록에 대한 최악의 O (N) 삽입을 피할 방법이 없습니다. – azz