단일연결리스트에서 링크부분을 교환할때의 문제입니다.
글쓴이: 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써서 만드시구요
댓글 달기