단일연결리스트에서 링크부분을 교환할때의 문제입니다.
글쓴이: alsrud / 작성시간: 수, 2014/11/19 - 9:22오전
left와 right를 교환할 때 앞 노드가 하나 더 있어야 할 것 같아서
prev를 추가했습니다.
저장부분에서 *list_head부터 데이터를 가져오게끔 구현해서
prev를 동적할당 한 다음 prev->next가 head를 가리키는 식으로 구현했습니다.
그런데 실행시켜보니 무한 루프를 도네요ㅜㅜ
일 주일 전 쯤 코드를 올렸었는데 조언을 참고해 코드를 다시 작성했는데도 그대로라
답답한 마음에 올려봅니다ㅜㅜ
//링크드리스트에 들어있는자료를 파일이름순으로 정렬 void sort_list(FILEINFO *list_head) { FILEINFO *prev; FILEINFO *tmp_list_left; FILEINFO *tmp_list_right; prev = (FILEINFO*)malloc(sizeof(FILEINFO)); prev->next = list_head; int change = 1; if(list_head == NULL || list_head->next == NULL) return ; tmp_list_left = prev->next; printf("%s\n", tmp_list_left->filename); //o tmp_list_right = prev->next->next; printf("%s\n", tmp_list_right->filename); //o while(change) { change = 0; printf("%s\n", tmp_list_left->filename); //o printf("%s\n", tmp_list_right->filename); //o while(tmp_list_right != NULL) { if(flag_r) { printf("%s\n", list_head->filename); if(strcmp(tmp_list_left->filename, tmp_list_right->filename) < 0) { prev->next = tmp_list_left->next; tmp_list_left->next = tmp_list_right->next; tmp_list_right->next = tmp_list_left; change = 1; //puts("=========================="); } if(change == 1) { prev = tmp_list_right; tmp_list_right = tmp_list_left->next; }else { prev = tmp_list_left; tmp_list_left = tmp_list_right; tmp_list_right = tmp_list_left->next; } } else { printf("%s\n", tmp_list_left->filename); if(strcmp(tmp_list_left->filename, tmp_list_right->filename) > 0 ) { prev->next = tmp_list_left->next; tmp_list_left->next = tmp_list_right->next; tmp_list_right->next = tmp_list_left; change = 1; puts("=================="); } if(change == 1) { prev = prev->next; tmp_list_right = tmp_list_left->next; }else { prev = prev->next; tmp_list_left = tmp_list_left->next; tmp_list_right = tmp_list_right->next; } } } prev->next = list_head; tmp_list_left = prev->next; tmp_list_right = prev->next->next; } } <//code>
Forums:
코드부터 작성하지 말고 종이에 swap할때 해야할
코드부터 작성하지 말고 종이에 swap할때 해야할 일을 그려서 차례대로 swap함수를 만들어서 코드로 옮기세요
또 sort는 swap써서 만드시구요
댓글 달기