【发布时间】:2020-11-19 18:28:36
【问题描述】:
我正在做一个双向链表,但我发现当我以相反的顺序打印节点时,代码不起作用。似乎被前面的 while 循环卡住了。
这是代码:
#include <stdio.h>
#include <stdlib.h>
struct LLNode
{
char name;
struct LLNode *left;
struct LLNode *right;
};
struct LLNode * createNode (char data)
{
struct LLNode *temp; temp = (struct LLNode *)malloc(sizeof(struct LLNode));
temp->name = data;
temp->left = NULL;
temp->right = NULL;
return(temp);
};
int main()
{
struct LLNode *curr=NULL;
struct LLNode *head=curr;
head = curr = createNode ('A') ;
printf ("curr->name = %c\n", curr->name) ;
printf ("head %c tail %c\n",head->name,curr->name) ;
curr->right = createNode('B');
printf ("curr->right->name = %c\n", curr->right->name) ;
curr->right->left = curr,
printf ("curr->right->left->name = %c\n", curr->right->left->name) ;
curr = curr->right;
printf ( "curr = %c\n" , curr->name) ;
printf ("head %c tail %c\n",head->name,curr->name) ;
curr->right = createNode('C');
printf("curr->right->name = %c\n",curr->right->name);
curr->right->left = curr;
printf("curr->right->left->name = %c\n", curr->right->left->name);
curr = curr->right;
printf("curr->name= %c\n",curr->name);
printf ("head %c tail %c\n",head->name,curr->name) ;
printf ("Linked list from head to tail: ");
while (curr!= NULL)
{
// Print nodes from beginning to end.
printf("%c ", head->name);
head = head->right;
}
printf ("Linked list in reverse: ");
while (curr!= NULL)
{
// Print nodes in reverse order.
printf("%c ", curr->name);
curr = curr->left;
}
return 0;
}
执行while循环“从头到尾打印节点”后代码似乎停止了,但我不知道为什么。我尝试过使用break、continue等方法,还是无法解决这个问题。
谁能帮忙?
【问题讨论】:
-
存在三个关于非匹配间接级别的编译器警告。请检查一下。第 23、42、51 行。
-
你似乎只是在设置
curr->right。你为什么不设置curr->left值?您将无法向后遍历 -
请注意,此站点不是用于查找代码中所有错误的实时对话。首选方法是使用调试器:)
-
哦,我是一个新的C学习者,但是我以前没有听说过调试器,我也将尝试学习,谢谢您的建议! :D
标签: c while-loop doubly-linked-list