게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[질문/C] sorted simply linked list
게시물ID : programmer_13767짧은주소 복사하기
작성자 : ozum2
추천 : 0
조회수 : 342회
댓글수 : 9개
등록시간 : 2015/10/10 01:14:13
옵션
  • 본인삭제금지
글마다 질문글이라 대단히 죄송합니다.
단순 연결 리스트를 공부하던 중 노드(정수 데이터)를 삽입할 때 정렬을 시키려고 합니다.
두세시간 머리를 굴리고 이리 수정, 저리 수정해봐도 잘 되지 않습니다.
 
단순 연결 리스트라 이전 노드를 before 로 저장해두었다가 사용하는 게 제 의도인데,
printf 문을 통해 테스트를 해보니 before와 pos가 같은 값을 나타냅니다.
저 상태에서 이전 노드의 값을 어떤 식으로 받으면 좋을지 알려주시면 감사하겠습니다.
 
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)
        {
            if((pos->data) > (new_node->data))
            {
                before = pos;
                pos = pos->link;
            }
            else
            {
                break;
            }
        }
}
 
 
 
 
main
 
    insert_node(&list, list, create_node(3, NULL));
    insert_node(&list, list, create_node(2, 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);
 
 
 
결과
 
2, 3, 3
5, 3, 3
9, 3, 3
7, 3, 3
3 -> 7 -> 9 -> 5 -> 2 ->
        printf("%d, %d, %d\n", new_node->data, before->data, pos->data);
        new_node->link = before->link;
        before->link = new_node;
    }
}
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호