我有刪除的鏈接列表每三個節點的功能:刪除每三個節點在鏈表
void tricimate()
{
node * toDelete = head->next->next;
while (toDelete != NULL)
{
if (toDelete->next == NULL)
{
tail = tail->prev;
tail->next = NULL;
delete toDelete;
break;
}
node * ahead = toDelete->prev;
node * behind = toDelete->next;
ahead->next = behind;
behind->prev = ahead;
delete toDelete;
toDelete = behind->next->next;
}
}
它的工作原理,但是當我嘗試使用的47值添加節點,它不不添加它。我有這樣的:
29 7 2 3 31 37
當我應該有這樣的:
29 7 2 3 31 37 47
這是我添加新節點到鏈表的後部代碼:
void addBack(int x)
{
node * newItem = new node;
if (head == NULL && tail == NULL)
{
newItem->data = x;
newItem->next = NULL;
newItem->prev = NULL;
head = newItem;
tail = newItem;
}
else
{
newItem->data = x;
newItem->next = NULL;
newItem->prev = tail;
tail->next = newItem;
tail = newItem;
}
}
我不不明白什麼是錯誤的,因爲addBack以前工作。但是在我使用tricimate函數後,它停止工作。我究竟做錯了什麼?
似乎你忘了在刪除節點後更改'tail'。請注意,您的代碼還有其他幾個潛在的錯誤(例如,如果只有一個節點,並且調用'tricimate',則第一行將導致運行時錯誤)。 – WhatsUp
而你在這裏有一個未定義的行爲:'node * toDelete = head-> next-> next;'如果'head'或'head-> next'是'NULL'。 – ftynse
@WhatsUp我的教授告訴我們假設鏈表中至少有三個節點,我究竟在哪裏不改變尾部? –