2012-04-22 3 views
1

나는 링크 된 목록을 통해 숫자 목록을 정렬하는 꽤 기본적인 프로그램을 가지고 있습니다.C++에서 연결된 목록에 포인터 전달

여기서 끊기고있는 부분은 요소를 목록의 시작 부분에 삽입해야하는 경우입니다.

void addNode(node *root) 
{ 
int check = 0; //To break the loop 
node *current = root; //Starts at the head of the linked list 
node *temp = new node; 


cout << "Enter a value for x" << endl; 
cin >> temp->x; 
cin.ignore(100,'\n'); 


if(temp->x < root->x) 
{ 
    cout << "first" << endl; 
    temp->next=root; 
    root=temp; 

     cout << root->x << " " << root->next->x; //Displays 12 15, the correct response 
} 

을하지만 경우,이 기능을 실행 한 후, 나는

을 시도 : 여기

그 루트 레벨> X = 15을 가정하고 사용자 입력 (12)는 메시지가 표시되면 가정 문제 코드의 덩어리입니다

cout << root->x; 

main()에 돌아 오면 다시 15를 표시합니다. 그래서 코드

root=temp; 

은 일단 기능을 떠나면 손실됩니다. 이제 * root에 대한 다른 변경 사항 (예 : LL에 다른 요소를 추가하고 그 옆에 root->를 지정)이 수행됩니다.

제안 사항?

+0

당신이 전면에 노드를 추가하는 addNode 명을하려는거야 목록에 추가하거나 노드를 정렬 된 위치에 실제로 추가 하시겠습니까? 그 의도는 분명하지 않다. 함수 밖에서 값을 읽고 전달해야합니다. – Matt

답변

2

로컬 node *root 변수를 설정 중이므로 원래 루트를 수정하지 않고 스택에 전달 된 매개 변수 만 수정합니다.

는, 포인터에 대한 참조를 사용하는 예를 들어 필요를 해결하려면 :

void addNode(node*& root) 

또는 포인터에 대한 포인터 :

void addNode(node **root) 
+0

어쨌든 불완전합니다. 끝 버팀대는 어 딨지? – Matt

+0

후자! 나는 그것이 단순한 것임을 알았다. @Matt H 이것은 완전한 프로그램이 아니며, 나에게 문제가되는 부분 일 뿐이다. 이 코드는 목록의 중간 또는 끝에 요소를 삽입하는 부분을 제공합니다.이 부분은 정상적으로 작동합니다. –