게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[질문/C] 정렬 연결 리스트
게시물ID : programmer_13830짧은주소 복사하기
작성자 : ozum2
추천 : 0
조회수 : 369회
댓글수 : 1개
등록시간 : 2015/10/12 23:26:33
옵션
  • 본인삭제금지
단순 연결 리스트에 노드를 정렬시켜서 입력하고 싶어서 insert_node 함수를 다음과 같이 만들었습니다.
이전에 올린 글에서 조금더 나아진 모습은 있지만 제대로 동작하지 않아 재질문 드립니다.
 
void insert_node(ListNode **phead, ListNode *p, ListNode *new_node)
{
    ListNode *pos = *phead;
    ListNode *before = *phead;
    if(*phead==NULL)
    {
        new_node->link = NULL;
        *phead = new_node;
    }
    else if(p==NULL)
    {
        new_node->link = *phead;
        *phead = new_node;
    }
    else
    {
        while((pos->link != NULL) && (pos->data <= new_node->data))
        {
            before = pos;
            pos = pos->link;
        }
        if(before == pos)
        {
            if(before->data <= new_node->data)
            {
                new_node->link = NULL;
                before->link = new_node;
            }
            else
            {
                *phead = new_node;
                new_node->link = before;
                before->link = NULL;
            }
        }
        else
        {
            new_node->link = before->link;
            before->link = new_node;
        }
        printf("%d, %d, %d\n", new_node->data, before->data, pos->data);
    }
}
 
 
 
아래는 main에서 함수를 호출한 부분입니다.
    ListNode *list=NULL;
    insert_node(&list, list, create_node(2, NULL));
    insert_node(&list, list, create_node(3, NULL));
    insert_node(&list, list, create_node(5, NULL));
    insert_node(&list, list, create_node(9, NULL));
    insert_node(&list, list, create_node(7, NULL));
    display(list);

 
결과는
3, 2, 2
5, 2, 3
9, 5, 3
7, 5, 9
2 -> 5 -> 7 -> 9 -> 3 ->
 
두번째로 입력한 숫자가 제 위치를 찾지 못하고 있습니다.
입력한 2, 3, 5 가 순서대로 들어가야 하지만
세번째인 5가 이전 노드를 2로 생각합니다... 여기서 while 문의 문제인 것 같은데 일단 한번 하고 넘어가야해서 do while문을 사용해도 안되서 질문드립니다.
 
저 세번째 녀석이 제 자리를 찾을 수 있게 도움 주시면 감사하겠습니다.
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호