我的添加功能显然有一个问题,因为它首先解除引用,因此首先指向什么.我只是不知道如何修复它,以便它不是一个空指针.
struct Node
{
int data;
Node *next;
};
class LinkedList
{
Node *first;
Node *last;
int count;
public:
LinkedList()
{
first = NULL;
last = NULL;
count = 0;
}
void Add(int item)
{
if (first == NULL)
{
first->data = item;
last->data = item;
last->next = NULL;
first->next = last;
count = 1;
}
else
{
Node *newNode = new Node;
newNode->data = last->data;
newNode->next = last;
last->data = item;
last->next = NULL;
count ++;
}
}
Run Code Online (Sandbox Code Playgroud)
你if和它之间有很多共同的代码else.
if (first == NULL)
{
first->data = item;
last->data = item;
last->next = NULL;
first->next = last;
count = 1;
}
else
{
Node *newNode = new Node;
newNode->data = last->data;
newNode->next = last;
last->data = item;
last->next = NULL;
count ++;
}
Run Code Online (Sandbox Code Playgroud)
在if,你count从增量0到1.在else,你也增加它.
count是始终得到增加.所以你不需要输入两次.
if (first == NULL)
{
first->data = item;
last->data = item;
last->next = NULL;
first->next = last;
}
else
{
Node *newNode = new Node;
newNode->data = last->data;
newNode->next = last;
last->data = item;
last->next = NULL;
}
count ++;
Run Code Online (Sandbox Code Playgroud)
你也last->data准备item在他们两个.
而你正last->next准备NULL参与其中.
if (first == NULL)
{
first->data = item;
first->next = last;
}
else
{
Node *newNode = new Node;
newNode->data = last->data;
newNode->next = last;
}
last->data = item;
last->next = NULL;
count ++;
Run Code Online (Sandbox Code Playgroud)
您还忘记创建new Node第一个新节点时.
if (first == NULL)
{
Node *newNode = new Node; // Added
first = newNode; // Added
last = newNode; // Added
first->data = item;
first->next = last;
}
else
{
Node *newNode = new Node;
newNode->data = last->data;
newNode->next = last;
}
last->data = item;
last->next = NULL;
count ++;
Run Code Online (Sandbox Code Playgroud)
在first->data = item你的if是多余的. first和last那里一样,并且last->data = item已经发生了.
if (first == NULL)
{
Node *newNode = new Node;
first = newNode;
last = newNode;
// Removed
first->next = last;
}
else
{
Node *newNode = new Node;
newNode->data = last->data;
newNode->next = last;
}
last->data = item;
last->next = NULL;
count ++;
Run Code Online (Sandbox Code Playgroud)
而且,由于first与newNode具有相同的价值在于if,我们可以交替使用的变量名.
if (first == NULL)
{
Node *newNode = new Node;
first = newNode; // These two pointers are equal!
last = newNode;
newNode->next = last; // (same pointer)
}
else
{
Node *newNode = new Node;
newNode->data = last->data;
newNode->next = last;
}
last->data = item;
last->next = NULL;
count ++;
Run Code Online (Sandbox Code Playgroud)
现在,你身上的几乎所有东西都在你else的身上if.它都可以搬出去.
Node *newNode = new Node;
if (first == NULL)
{
first = newNode;
last = newNode;
}
else
{
newNode->data = last->data;
}
newNode->next = last;
last->data = item;
last->next = NULL;
count ++;
Run Code Online (Sandbox Code Playgroud)
那个代码现在也应该更容易理解.教训:不要重复自己.:)
| 归档时间: |
|
| 查看次数: |
803 次 |
| 最近记录: |