2013-10-06 3 views
0

재귀를 사용하여 연결된 목록의 맨 앞에 노드를 추가해야합니다.링크 된 목록의 맨 앞에 노드를 반복적으로 추가하는 방법

다음은 구현하려는 추가 메소드입니다. 난 단지 당신이 새 노드를 만들 단일 연결리스트의 전면에 항목을 추가하려면 링크 된 목록 :(

public void add(E element) 
    { 
     Node<E> newNode = new Node<E>(element, null); 

     if (this.next == null) 
     { 
      this.next = newNode; 
     } else { 
      next.add(element); 
     } 
    } 
+1

여기에서 재귀를 어떻게 사용합니까? 나는 이해하지 못한다. –

+3

새 노드와 기존 노드로 수행해야 할 작업을 종이에 그린다. 그것은 물건을 더 분명하게 할 것이다. 또한 우리는 화면 상에있는 것을 읽을 수 없으므로 Node 클래스의 모습을 추측 할 수 있습니다. –

+1

답변은 다음과 같은 문제에 따라 상당히 다를 것입니다. 헤더 노드가 있습니까? 아니면 노드 이외의 목록 클래스가 있습니까? 목록이 변경 가능하거나 변경 불가능합니까? 반환 무언가를 추가하거나 위와 같이 void를 반환해야합니까? –

답변

1

의 뒤쪽에 추가하는 방법을 알아낼하고 첫 번째로 지적 할 수있다 같은 목록의 노드입니다.이 새로운 노드가 이제 연결리스트의 새로운 첫 번째 노드입니다

.

+0

이게이 목록의 처음에 추가 할 수 있습니까? '노드 newNode = 새 노드 (요소, 다음)' – lauraxx

+0

@lauraxx는'next'의 값에 따라 다릅니다. – Philipp

1

그것은, 끝에 요소의 추가하는 것보다 훨씬 쉽게 아주 간단해야한다.

뭔가 이게 작동해야합니다 :

,210
public void addToFront(E element) { 
    element.next = rootElement; 
    rootElement = element; 
} 
0

알고리즘은 SE는 또 다른 트릭이 이루어졌다 자바에서이

public void add(E element) 
    { 
     Node<E> newNode = new Node<E>(element, null); 
     if (root == null) 
     { 
     root = new Node(element, null); 
     } 
     else 
     { 
     Node temp = new Node(element, null); 
     temp.next = root; 
     root = temp; 
     } 
    } 
0
public Node<E> addFirst(E element) 
{ 
    return new Node<E>(element, this.next); 
} 

Node<String> list; 
... 
list = list.addFirst("a"): 

과 같이해야한다 : 필드 "노드"로 외부 컨테이너 LinkedList 클래스를 확인합니다. 이렇게하면 size()에 대한 카운터를 유지 관리 할 수 ​​있습니다. 이것은 상태 저장 클래스입니다.

위의 코드는 동시성에 좋은 불변 목록 클래스에 사용할 수 있습니다.

관련 문제