2013-04-19 13 views
1

사용자가 이름과 뇌물 금액을 입력하고 가장 많은 양의 뇌물을 맨 앞에 놓은 목록에 추가되는 링크 된 목록으로 간주됩니다.링크 된 목록 및 포인터

이 특정 단계에서 뇌물이 방정식에 들어 가지 않고 사람들을 한 번 이상 입력하는 방법을 알아 내려고 노력하고 있습니다. 내가 잘하지 못하는 포인터가 포함되어 있기 때문에 여기에서 문제가있다.

목록의 첫 번째 노드가 성공적으로 입력 된 후 "else if (head! = NULL)"코드에 결함이 있으므로 두 번째 노드를 입력 한 후 프로그램이 고정됩니다. 구문인지 아니면 단순히 개념을 완전히 이해할 수 있는지 확실하지 않습니다.

또한 이전 노드에 대한 링크를 PersonRec 구조의 일부로 사용할 수 없기 때문에 도움이되었습니다.

이 문제를 어떻게 해결할 수 있습니까?

+0

목록의 다음 요소에 '링크'대신 '다음'이라는 이름을 사용하는 것이 일반적입니다 (규칙?). 코드를 더 읽기 쉽고 명백하게 만듭니다. 당신의 문제를 해결하지는 못 하겠지만 나는 언급할만한 가치가 있다고 생각합니다. @Mark Wilkins는 실제 문제를 이미 해결하도록 안내해 드렸습니다. – Pete

답변

2

코드가 닫히고 있지만 실제로 코드는 목록에 새 두 번째 항목을 추가하지 않습니다. 받는 추가되는

currPtr=&p; 

단순히 로컬 변수 currPtr에 새로운리스트 요소의 주소 (즉, 그 결과하지 할당 : 그것의 문제는리스트의 끝과 최후의 할당에 도달한다는 것이다 명부). 이 작업 점점 towoard 몇 가지 제안은 다음과 같습니다 (이런 종류의 숙제처럼 보인다, 그래서 난 그냥 코드를 제공하지 않음) : NULL에

  • 초기화 p->link 객체를 생성 한 후. 그것을 초기화하는 생성자가있는 것처럼 보이지 않습니다 (이 상황에서 구조체와 클래스의 혼합이 조금 이상하게 보입니다).
  • currPtr 선언에서 한 수준의 간접 참조 (단일 별표)를 제거하십시오.
  • currPtr에 다음 (링크) 주소를 할당하기 전에 while 루프에서 null인지 확인하십시오. 일단 할당하면, 더 이상 노드의 주소를 업데이트 할 필요가 없습니다.