从用户输入C ++创建和打印链表

时间:2016-10-07 19:41:53

标签: c++

#include <iostream>

using namespace std;

int main()
{
    struct node
    {
        int data;
        node * next;
    };

    node * head;
    node * n;
    node * temp;
    node * q;
    int number;

    cout << "Enter numbers";
    cin >> number;
        n = new node;
        n->data = number; 
        head = n;
        temp = n; 
    while (cin >> number)
    {
        while (number != -500)
        {
            n = new node;
            n->data = number;
            temp->next = n;
            temp = n;

        }
    }


    while (head != NULL)
    {
        cout << head->data;
        head = head->next; 

    }
}

我不明白为什么这不起作用。程序创建一个新节点,然后设置用户输入的与该新节点的变量数据等价的内容,然后使head和temp指向新节点。然后它获取用户第二个输入并将其与-500进行比较,如果它评估为真,则创建一个新节点将第二个输入的数据放入变量数据然后将第一个节点和第二个节点链接在一起然后它产生临时点到第二个节点。如果第二个while循环的条件为false,则转到第三个,这是打印列表的位置。

3 个答案:

答案 0 :(得分:0)

谁将最后一个节点设置为NULL?

在n =新节点; n-&gt; next不是NULL但未定义,在Debug版本中通常是0xcccccccc或类似的值,以使其可见,它未被初始化。如果您尝试取消引用它,您将获得访问冲突。

答案 1 :(得分:0)

   while (cin >> number) {
    if (number != -500) { ...; // do your stuff
     break;
    }
   }

如果您想在检查数字不是-500后中断,那么您可以执行以下操作:

delete

顺便说一下,你有内存泄漏。如果你使用平坦的C指针,那么考虑delete node运算符来清除你的记忆。为此,您需要知道列表的开始位置(基本上是头部)并遍历调用$ date -d "2016-11-06 01:00:00" "+%F %T%z" 2016-11-06 01:00:00-0400 的整个列表。

请注意,编写类似以下内容的代码风格不好:

  

while(cin&gt;&gt; number)

答案 2 :(得分:0)

您也可以尝试以下操作- 该代码使用户输入的链表和printlinkedlist(函数)打印创建的链表。

    #include <bits/stdc++.h>
    using namespace std;
    struct node 
    {
      int data;
      node* next;
    };
    void printlinkedlist(node* node)
    {
      int c=0; //taken just for good looking output
      while(node!=NULL)
      {
        if(c>0)
        {
          cout<<"->"<<node->data;
          node = node->next;
        }
        else
        {
          cout<<node->data;
          node = node->next;
          c++;
        }
      }
    }
    int main() {
      int n;
      cout<<"Enter no. of nodes=";
      cin>>n; //User enters number of nodes he want.
      int num,c=0; //initialized c for setting head with second node..
      node* head = new node; //initialized head node
      node * temp = new node; //initialized temp node 
      cin>>num;
      head->data=num;
      for(int i=2;i<=n;i++)
      {
        if(c==0)
        {
          cin>>num;
          temp->data=num;
          head->next=temp; //head point to second node i.e. temp
          c++;
        }
        else
        {
          cin>>num;
          node * temp1 = new node; //initialize other temp node for every value 
          temp1->data=num;
          temp->next=temp1; //point to temp1 to temp 
          temp=temp1; //set temp as temp1 
        }
      }
      printlinkedlist(head); 
    }