1
작업은 연결된 목록을 역순으로하여 링크 된 목록을 만든 다음 인쇄가 끝난 다음 모든 역순으로 작업 한 다음 다시 인쇄합니다. 그러나 두 번째 인쇄는 비어 있습니다. 포인터 문제라고 생각 하나? 감사.연결된 목록 역방향
void reverseLinkedList(struct node** head) {
struct node* curr, *prev, *temp;
curr = *head;
prev = NULL;
while (curr) {
temp = prev;
prev = curr;
curr = curr->next;
prev = temp;
}
*head = prev;
}
struct node* buildLinkedList(int list[], int len) {
struct node* head = NULL;
struct node* tail = NULL;
struct node* node;
int i;
for (i = 0; i < len; i++) {
node = (struct node*) malloc(sizeof(struct node));
node->data = list[i];
node->next = NULL;
if (!head) {
head = node;
} else {
tail->next = node;
}
tail = node;
}
return head;
}
void printLinkedList(struct node** head) {
struct node* s = *head;
while(s) {
printf("%d\t", s->data);
s = s->next;
}
printf("\n");
}
int main() {
int list [6] = {6,7,8,3,4,5};
struct node* header = NULL;
header = buildLinkedList(list, 6);
printLinkedList(&header);
reverseLinkedList(&header);
printLinkedList(&header);
}
내가 콘솔에서 얻는 결과는 다음과 같습니다 두 번째 printLinkedList 아무것도 인쇄되지
6 7 8 3 4 5
. 문제가있는 곳이 궁금합니다. 감사.
코드를 단계별로 실행하고 디버거에서 데이터가 변경되는 것을 보았습니까? 그것은 오류를 찾을 때 많은 도움이 될 수 있습니다. – Tony
투표의 마감 :이 문제는 디버거에서 코드를 실행하거나 printf 문을 여러 개 추가하여 중간 변수의 상태를 알려줌으로써 해결할 수 있습니다. –