2017-09-24 1 views
-2

데이터 구조 클래스에 대한 간단한 연결 목록을 만들고 머리 포인터가 어떻게 작동하는지 이해하는 데 문제가 있습니다.연결된 목록 머리글 C++

나는이 메이크업 목록 대신의 첫 번째 요소에 대한 포인터의 첫 번째 요소를 머리를하지 않습니다, 그러나

template <typename E> 
class SSLL{ 
template<typename E> 
     struct Node { 
      E data; 
      Node* next; 
     }; 
public: 
template <typename E> 
    SSLL(); 
    void push_front(E element); 
private: 
    Node<E> * head; 
    Node<E> * tail; 
}; 
template <typename E> 
SSLL<E>::SSLL() { 
    head = NULL; 
    tail = NULL; 
} 
template <typename E> 
void SSLL<E>::push_front(E element) { 
    Node<E> * n = new Node<E>; 
    n->data = element; 
    n->next = head; 
    head = n; 
    if (!tail) { 
     tail = n; 
    } 
} 

있습니다.

push_front (E 요소)를 변경하려고했지만 null 포인터 오류가 발생했습니다. 나는 온라인 찾을 머리 = N을 가지고 있지만 대신 머리 -> 다음 = N의 그런 내가 왜 여전히 문제가 이해가

template <typename E> 
void SSLL<E>::push_front(E element) { 
    Node<E> * n = new Node<E>; 
    n->data = element; 
    n->next = head->next; 
    head->next = n; 
    if (!tail) { 
     tail->next = n; 
    } 
} 

모든 예제.

감사합니다.

+1

마치 디버거를 사용하여 코드를 단계별로 실행하여 그 라아를 얻는 것처럼 보입니다. 무슨 일이야. – user0042

+1

링크 된 목록을 디버깅하는 데 유용한 또 다른 도구는 펜과 종이입니다. 나는 너를 괴롭힌다. 빨판을 그립니다. 노드를 그립니다. 한 번에 하나씩 변경하고 목록이 작업 후에 있어야하는 새 구성으로 다시 구성합니다. 목록의 변형을 코드에서 수행하고있는 것으로 시각화하고 이에 따라 코드를 조정하기 위해 수행 한 작업을 비교하십시오. – user4581301

+0

좋아요. 그것은 읽기가 훨씬 쉽습니다. 'head'가'NULL' 일 때리스트에 처음 삽입 될 때'head-> next'가 어떻게 될지 자문 해보십시오. – user4581301

답변

1

는 연결리스트의 대부분의 형태에서, 헤드 포인터 목록의 첫 번째 노드로 포인트 또는 null의 :

  +---+  +---+  +--+ 
head --> | A | --> | B | --> |/0| 
     +---+  +---+  +--+ 
        ^ 
        | 
tail ----------------+ 

많은 초보자 노드와 목록을 혼동. 노드는 데이터를 포함하는 객체입니다. 목록은 노드 모음입니다. 헤드 노드에 새 노드 점을 만들기

  1. : 전면에 삽입 머리
    에 밀어

    는 다음과 같은 단계가 필요합니다.

  2. 헤드 노드가 새 노드를 가리 키도록 변경합니다.

      +---+ 
    p_new -->| C | 
         +---+ 
          | 
          V 
         +---+  +---+  +--+ 
    head --> | A | --> | B | --> |/0| 
         +---+  +---+  +--+ 
    

    2) 새 노드에 머리 포인트를 만들기 : 노드 머리에 새 노드 점을 만들기

1) C++에서

  +---+ 
p_new -->| C | 
head -->| | 
     +---+ 
      | 
      V 
     +---+  +---+  +--+ 
     | A | --> | B | --> |/0| 
     +---+  +---+  +--+ 

을,이과 같습니다

Node * p_node = new Node; 
p_node->next = head; // Step 1. 
head = p_node; // Step 2.