为什么要打印循环链表中的最后一个元素?

时间:2019-02-15 05:56:55

标签: c++

在下面的代码中,仅显示最后一个元素内存储的数字,而不显示其余元素。

#include <stdio.h>
#include <iostream>

using namespace std;

struct node
{
   int data;
   node* next;
};

struct node * Start = NULL;
struct node * End = NULL;
void CreateList(int num)
{
   struct node *temp = new struct node;
   int data,i=0;
   while(true)
   {
      cout<<"Enter data \n";
      cin>>data;
      temp->data = data;
      temp->next = Start;
      if(Start==NULL)
      {
         Start = End = temp;
      }
      else{
         End->next = temp;
         End = temp;

      }
      if(i==num-1)
         break;

      i++;
   }
}

void Display()
{
   struct node* temp1;
   temp1 = Start;
   do{
      cout<<temp1->data<<endl;
      temp1=temp1->next;
   } while(temp1!=Start);
}

int main()
{
   int num;
   cout<<"How many elements you want to input?\n";
   cin>>num;
   CreateList(num);
   Display();
   return 0;
}

我使用结构而不是类来完成它。我使用了两个非动态指针“开始”和“结束”。主要问题来自Display()函数。 Display()正在打印最后一个元素的值。

输出:

enter image description here
(点击图片放大)

1 个答案:

答案 0 :(得分:1)

您没有在CreateList中创建所需数量的节点。您正在使用

创建节点
struct node *temp = new struct node;

并在循环中重用同一节点。

这是该功能的更新版本。

void CreateList(int num)
{
   int data,i=0;
   while(true)
   {
      cout<<"Enter data \n";
      cin>>data;

      // Create a new node for every data
      struct node *temp = new struct node;

      temp->data = data;
      temp->next = Start;

      if(Start==NULL)
      {
         Start = End = temp;
      }
      else{
         End->next = temp;
         End = temp;

      }
      if(i==num-1)
         break;

      i++;
   }
}

进一步清理的建议。在C ++中,您不需要使用struct node。只需node就足够了。

node* Start = NULL;
node* End = NULL;

// Create a new node for every data
node *temp = new node;