2011-04-26 3 views
1

다음은 내가 가지고있는 것입니다.Java - 목록 끝에 노드를 추가 하시겠습니까?

public class Node{ 
    Object data; 
    Node next; 

    Node(Object data, Node next){ 
     this.data = data; 
     this.next = next; 
    } 

    public Object getData(){ 
     return data; 
    } 

    public void setData (Object data){ 
     this.data = data; 
    } 

    public Node getNext(){ 
     return next; 
    } 

    public void setNext(Node next){ 
     this.next = next; 
    } 
} 

목록 끝에 노드를 추가하는 코드는 어떻게 작성합니까?

그래서

head -> [1] -> [2] -> null 

어떻게하면

head -> [1] -> [2] -> [3] -> null 

실제로 ... 나는 끝에 추가해야하는지 잘 모르겠습니다. 추가하고 정렬하는 것이 유효하다고 생각합니까? 확실하지 않다.

고마워!

+0

당신이 명확히 수 있습니까? 목록이 어떻게 든 데이터에 의해 순서가 매겨지기로되어 있습니까? 게다가 마지막에 추가해야하는 이유는 무엇입니까? (나도 알다시피, 그것은 임의적이지만, 전체 질문을 이해하려고 노력하고있다.) –

답변

5
public void addToEnd(Object data){ 
    Node temp = this; 
    while(temp.next!=null)temp=temp.next; 
    temp.next=new Node(data, null); 
} 
+1

'temp.next = new ...'를 의미 했습니까? –

+0

'temp.next'는 항상 루프 이후에 null이 아니겠습니까? –

+0

@ 스크럼 마이스터, 미안. 내 실수. Fixed now –

1

끝에 추가하려면 목록의 끝까지 (즉, 다음 = null까지) 걸어야하고 새 노드를 추가해야합니다.

실제로이 경우 ArrayList를 사용하면 링크 된 목록이나 수동 구조가 전혀 필요 없습니다.

1

노드를 추가하는 방법에서 헤드에서 시작하여 "다음 노드"가 null인지 확인하는 while 루프를 작성하십시오. 그렇지 않으면 "다음 노드"로 진행하고 반복하십시오.

아무 것도 가리 키지 않는 노드에 있으면 추가 할 노드에 null 참조를 다시 할당하는 것처럼 노드를 추가하는 것이 간단합니다. 머리에서

2

시작 :

Node currentNode = headNode; 
while (node.getNext() != null) { 
    currentNode = currentNode.getNext(); 
} 

currentNode.setNext(newNodeForInsertion); 

더 빠른 방법은 전체 목록을 이동하지 않아도 어딘가리스트의 마지막 노드를 저장하는 것입니다.

2

끝에 도달 할 때까지 각 노드를 재귀 적으로 탐색합니다.

public void navigate(Node insertNode) 
{ 
    if(next == null) 
     next = insertNode; 
    else 
     next.navigate(insertNode); 
} 
4

링크 된 목록입니다.

) 모든 노드가 머리부터 시작하여 마지막 노드를 찾은 다음 추가합니다.

또는

B) 새로운 마지막 노드에 다음 업데이트 꼬리에 꼬리를 추가, 꼬리 추적합니다. 당신이 분류 원한다면 당신의 질문에서 말할 수없는 분류 아니에요

0
Node n = head; 
while(n.getNext() != null){ 
    n = n.getNext(); 
} 
n.setNext(nodeToAdd); 

. 어떤 다른 종류의 웜을 열 수 있습니다. 예를 들어 정렬 할 대상과 같은 개체 유형의 연결된 목록이 있으면 정렬 할 수있는 의미가 없습니다.

1

재귀 솔루션 : 당신이 종류의 모든 거라고 왜

public void addToEnd(Object data){ 
    if (next==null) 
     next = new Node(data, null); 
    else 
     next.addToEnd(data); 
} 
관련 문제