【发布时间】:2011-12-11 16:03:24
【问题描述】:
任务是反转一个链表,所以我建立了链表,然后打印出来,然后所有的反转功能,然后我们第二次打印它。但是,第二个打印是空的。我认为这是指针问题,任何人都可以解释吗?谢谢。
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);
}
我从控制台得到的结果是:
6 7 8 3 4 5
第二个 printLinkedList 没有打印任何内容。想知道问题出在哪里。谢谢。
【问题讨论】:
-
您是否曾单步执行代码并观察调试器中的数据变化?这在查找错误时很有帮助。
-
投票关闭:你可以通过在调试器中单步调试代码来解决这个问题,或者通过添加一堆 printf 语句来告诉你中间变量的状态。
标签: c pointers printing linked-list reverse