簡體   English   中英

為什么要打印循環鏈表中的最后一個元素?

[英]Why is it printing the last element in circular linked list?

在下面的代碼中,僅顯示最后一個元素內部存儲的數字,而不顯示其余元素。

#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()正在打印最后一個元素的值。

輸出:

在此處輸入圖片說明
(點擊圖片放大)

您沒有在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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM