-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;
}
}
모든 예제.
감사합니다.
마치 디버거를 사용하여 코드를 단계별로 실행하여 그 라아를 얻는 것처럼 보입니다. 무슨 일이야. – user0042
링크 된 목록을 디버깅하는 데 유용한 또 다른 도구는 펜과 종이입니다. 나는 너를 괴롭힌다. 빨판을 그립니다. 노드를 그립니다. 한 번에 하나씩 변경하고 목록이 작업 후에 있어야하는 새 구성으로 다시 구성합니다. 목록의 변형을 코드에서 수행하고있는 것으로 시각화하고 이에 따라 코드를 조정하기 위해 수행 한 작업을 비교하십시오. – user4581301
좋아요. 그것은 읽기가 훨씬 쉽습니다. 'head'가'NULL' 일 때리스트에 처음 삽입 될 때'head-> next'가 어떻게 될지 자문 해보십시오. – user4581301