|  |
| |
| 영원한공부 |
동작 순서에 문제가 있네요.
만약 temp가 현재 가리키고 있는 구조체에 지워야할 데이터가 있고, 아래와 같은 상황이라면
temp tail
↓ ↓
------------------- -----------------
ㅣ_______________ㅣ ㅣ______________ㅣ
temp->next 의 값은 tail과 같기 때문에
while(temp->next != tail) 이 조건에 걸려서 안에 있는 조건문을 실행하지 않겠죠.
지금 함수동작순서가
① temp->next와 tail을 비교
② temp->next와 tail이 다르면 temp->data와 data를 비교
③ 같지 않으면 temp를 다음구조체로 이동
이 순서인데 이걸
① temp->data와 data를 비교
② 같지 않으면 temp를 다음 구조체로 이동
③ temp->next와 tail을 비교
이런식으로 바꾸면 될거에요. |
2011/06/13 |
|
| 영원한공부 |
밑에 제가 고친 걸 올려놨는데 문제 해결 안 되시면 보세요.
void llist::remove(int data){
node* temp = head;
while(temp->next != tail){
temp = temp->next;
if (temp->data == data){
temp->prev->next = temp->next;
//temp->next = temp->prev; //이부분은 굳이 필요 없는 것 같아요.
delete temp;
return;}
}
cout << "리스트 내에 그런 데이터가 없습니다." << endl;
} |
2011/06/13 |
|
| 메버리키 |
감사합니다..
그게 급하게 고친거라서 헷갈렸었는데 어떻게찾아내셨는지..
for(;;) cout << "Good!!";
= 소음공해 어쨋든
그렇게고쳐두되구 temp->next != NULL로 바꿔두 되는것같아요
그리고 temp->next->prev = temp->prev; 이거 해줘야할것같아요..
갑자기 님코드보니까 번뜩하고 생각났어요..감사합니다.. |
2011/06/13 |
|
| 영원한공부 |
메버리키// temp->next->prev = temp->prev; 이걸 잊고 있었네요....
그리고 제가 한 방식보다 님이 말씀하신 temp->next != NULL 이게 더 이해하기 쉬운 것 같아요.
저도 다음에 이걸로 해야겠어요 감사합니다. |
2011/06/14 |
|