为什么代码在while循环后停止执行?

lyhsuan01

我正在做一个双向链表,但我发现当我以相反的顺序打印节点时,代码不起作用。似乎被前一个 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等方法,但仍然无法解决这个问题。

任何人都可以帮忙吗?

罗汉·库马尔

您的代码中存在一些问题。除了不设置curr->left值。我认为您遍历链接列表的方式;head 将NULL在第一次迭代结束时,控制不会进入反向打印循环。当您到达curr->left == NULLcurr->right == NULL根据您向前或向后移动时,您需要在不移动头部的情况下跳出循环

我对您的代码进行了一些代码更改,并且能够看到所需的输出:

int main() {
    struct LLNode *curr=NULL;
    struct LLNode *head = curr;
    struct LLNode *prev = NULL;

    // Insert first Element
    head = curr = createNode ('A') ;
    printf ("curr->name = %c\n", curr->name) ;

    // Insert Second Element
    curr->right = createNode('B');
    printf ("curr->right->name = %c\n", curr->right->name) ;

    prev = curr;
    curr = curr->right;
    printf ( "curr = %c\n" , curr->name) ;

    // Insert Third Element
    curr->right = createNode('C');
    curr->left = prev;
    printf("curr->right->name = %c\n",curr->right->name);

    prev = curr;
    curr = curr->right;
    curr->left = prev;
    printf("curr->name= %c\n",curr->name);

    printf ("\nLinked list from head to tail: ");
    while (1) {
        // Print nodes from beginning to end.
        printf("%c ", head->name);
        if (head->right == NULL)
            break;
        head = head->right;
    }

    printf ("\nLinked list in reverse: ");
    while (1) {
        // Print nodes from beginning to end.
        printf("%c ", head->name);
        if (head->left == NULL)
            break;
        head = head->left;
    }

    return 0;
}

当我运行它时,我能够看到列表被正确打印:

curr->name = A
curr->right->name = B
curr = B
curr->right->name = C
curr->name= C

Linked list from head to tail: A B C 
Linked list in reverse: C B A

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在第一次循环后不执行while循环?

为什么这个while循环进入无限状态而不是在3次迭代后停止?

为什么while(0)不执行代码?

为什么我的函数在遇到返回(在两个循环内返回)后仍执行剩余代码

为什么我的代码在执行 while 循环时不起作用

为什么我的while循环在一次后无法执行?

为什么在用户输入了太长的输入后重复执行while循环?

为什么我输入字符串后我的代码不会进入while循环?

为什么在C ++中的return语句后执行停止?

为什么在打印“这是子进程!”后停止执行?

为什么中断顺序不能停止我的代码中的循环?

为什么此Powershell for循环在4次迭代后停止

为什么while循环后什么也没打印?

为什么异步方法中的while循环不会停止?

为什么我的while循环没有停止?

为什么需要中断才能停止while循环

为什么while循环在else语句之前停止?

为什么while循环在被暂停后会停止?

为什么在 forEach 循环完成之前执行代码?

程序在while循环后停止

为什么我在eclipse评论后仍然执行python代码

为什么等待后的代码无法执行?

为什么我的LabView while循环似乎执行太多次?

为什么 while 循环之后的语句并不总是执行?

为什么即使值是true,我的while循环仍继续执行?

为什么多个 if 语句比执行 while 循环更快?

我的 while 循环执行但不期望输出。为什么?

为什么 SAS 中的 DO WHILE 和 DO UNTIL 在应该停止循环之后再执行一次循环体?

定义中断代码时,为什么while循环失败?