链表与空节点中的数据

时间:2015-12-18 01:25:46

标签: c++ linked-list

我想制作链表..

但第一个节点带有数据和空链接

如果我输入一个字符串(123) 链表如下:

1 / null - 2 /指向最后一个(1) - 3 /指向最后一个(2)

#include <iostream>
#include <string>
using namespace std;
struct link
{
  int data;
  link* next;
};
class LinkedList
{
private:
  link* first;
public:
  LinkedList(){}
  void Add(string s)
  {
    for (int i = 0; i > s.length(); i++)
    {
      if (i == 0)
      {
        first->data = s[i];
        first->next = NULL;
      }
      else
      {
        link* NewOne = new link;
        NewOne->data = s[i];
        NewOne->next = first;
        first = NewOne;
      }


    }

  }
  void display()
  {
    cout << first->data;
  }


};
int main()
{
  LinkedList l1;
  l1.Add("2734");
  l1.display();

  return 0;
}

代码中的错误

3 个答案:

答案 0 :(得分:1)

您忘记为first分配内存。

以下内容可能有所帮助(使用std::unique_ptr进行免费/正确的内存管理):

struct link{
    char data;
    std::unique_ptr<link> next;
};

class LinkedList {
private:
    std::unique_ptr<link> first;
public:

void Set(const std::string& s){

    for (auto c : s) {
        std::unique_ptr<link> node = std::move(first);
        first = std::make_unique<link>();
        first->data = c;
        first->next = std::move(node);
    }
}

Live example

答案 1 :(得分:1)

它看起来像是在int中存储字符。您的输出将是字符的ASCII值,而不是原始int值。

我建议使用Jarod42已经完成的独特指针。话虽如此,下面的这个简单示例不使用它们,因此您需要适当地调用delete或使用unique_ptr。

我添加了一个最后一个指针,用于在我们建立新链接时帮助遍历列表。

private:
Link * first;
Link *last;
int numLinks;

public:
LinkedList()
{
  first = NULL;
  last = NULL;
  numLinks = 0;
}

现在添加

void Add(string s)
{
   for (int i = 0; i < s.length(); i++)
   {
      if (numLinks == 0)
      {
         first = new Link;
         first->data = (s[i] - '0');
         first->next = NULL;

         last = first;
         numLinks++;
      }
      else
      {
         Link * newLink = new Link;
         newLink->data = (s[i] - '0');
         newLink->next = NULL;

         last->next = newLink;
         last = newLink;
         numLinks++;
      }
   }
}

答案 2 :(得分:0)

构造函数不初始化first成员。随后,在Add()

for (int i = 0; i > s.length();i++){
    if (i == 0){
       first->data = s[i];
     first->next = NULL;
    }

这最终取消引用未初始化的指针,导致未定义的行为。

您的display()也存在问题,但这是主要问题。