您在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 ++;
}
在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 ++;
你也在他们都设置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 ++;
当它是第一个新节点时,您也忘了创建一个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 ++;
的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 ++;
而且,由于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 ++;
,几乎所有在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 ++;
这段代码现在也应该可以理解了。教训:Don't Repeat Yourself。 :)
如果你不希望'first'为空,那么将它指向某个东西。你已经知道如何创建一个'Node'(如'else'块所示),所以:'first = new Node;'。 – jamesdlin 2013-04-09 02:53:22
你的条件说'如果第一个是空的,那么先用'。这是不正确的。如果它为null,则不能使用“first”。 – 2013-04-09 02:54:06
你可以通过为它分配内存来使它不为NULL,就像你在else情况下一样('Node * newNode = new Node;')。 – MatthewD 2013-04-09 02:57:00