<div>단순 연결 리스트에 노드를 정렬시켜서 입력하고 싶어서 insert_node 함수를 다음과 같이 만들었습니다.</div> <div>이전에 올린 글에서 조금더 나아진 모습은 있지만 제대로 동작하지 않아 재질문 드립니다.</div> <div> </div> <div>void insert_node(ListNode **phead, ListNode *p, ListNode *new_node)<br>{<br> ListNode *pos = *phead;<br> ListNode *before = *phead;<br> if(*phead==NULL)<br> {<br> new_node->link = NULL;<br> *phead = new_node;<br> }<br> else if(p==NULL)<br> {<br> new_node->link = *phead;<br> *phead = new_node;<br> }<br> else<br> {<br> while((pos->link != NULL) && (pos->data <= new_node->data))<br> {<br> before = pos;<br> pos = pos->link;<br> }<br> if(before == pos)<br> {<br> if(before->data <= new_node->data)<br> {<br> new_node->link = NULL;<br> before->link = new_node;<br> }<br> else<br> {<br> *phead = new_node;<br> new_node->link = before;<br> before->link = NULL;<br> }<br> }<br> else<br> {<br> new_node->link = before->link;<br> before->link = new_node;<br> }<br> printf("%d, %d, %d\n", new_node->data, before->data, pos->data);<br> }<br>}</div> <div> </div> <div> </div> <div> </div> <div>아래는 main에서 함수를 호출한 부분입니다.</div> <div> ListNode *list=NULL;</div> <div> insert_node(&list, list, create_node(2, NULL));<br> insert_node(&list, list, create_node(3, NULL));<br> insert_node(&list, list, create_node(5, NULL));<br> insert_node(&list, list, create_node(9, NULL));<br> insert_node(&list, list, create_node(7, NULL));<br> display(list);<br><br></div> <div> </div> <div>결과는</div> <div>3, 2, 2<br>5, 2, 3<br>9, 5, 3<br>7, 5, 9<br>2 -> 5 -> 7 -> 9 -> 3 -><br></div> <div> </div> <div>두번째로 입력한 숫자가 제 위치를 찾지 못하고 있습니다.</div> <div>입력한 2, 3, 5 가 순서대로 들어가야 하지만</div> <div>세번째인 5가 이전 노드를 2로 생각합니다... 여기서 while 문의 문제인 것 같은데 일단 한번 하고 넘어가야해서 do while문을 사용해도 안되서 질문드립니다.</div> <div> </div> <div>저 세번째 녀석이 제 자리를 찾을 수 있게 도움 주시면 감사하겠습니다.</div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.