我有这个代码来打印链接列表[1,2,3]

    void reverse(struct node *ptr){
          head = ptr;
          while(ptr!=NULL){

              printf("%d--->",ptr->data);

              ptr=ptr->next;
          }
  }

输出:
1-->2-->3
我试图打印ptr(当前节点)的下一个元素
 void reverse(struct node *ptr){
              head = ptr;
              while(ptr!=NULL){

                  printf("%d--->",ptr->data);

                  ptr=ptr->next;
                      printf("%d--->",ptr->data);
              }
      }

为什么不打印1-->2-->2-->3-->3?

最佳答案

你可能想改变这个

  ptr=ptr->next;
  printf("%d--->",ptr->data);

变成
 ptr=ptr->next;
 if (NULL != ptr)
   printf("%d--->",ptr->data);

在最后一次迭代中,程序试图取消引用NULL,这将导致未定义的行为,进而极有可能导致程序崩溃。
stdout被行缓冲时,填充1-->2-->2-->3的缓冲区将不再被刷新和打印。
你可能有机会通过添加
flush(stdout);

每次呼叫print()后。

关于c - 打印链表当前节点的下一个元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18343270/

10-16 03:46