数据在null节点中的链表

linked list with data in null node

本文关键字:链表 节点 null 数据      更新时间:2023-10-16

我想制作一个链表。。

但是具有数据和零链路的第一个节点

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

1/空-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;
}

代码有什么问题

您忘记为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);
    }
}

实例

看起来您也在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++;
      }
   }
}

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

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

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

你的display()也有问题,但这是主要问题。