您在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