我的代碼有問題。我需要撰寫一個程式來創建一個鏈表并執行插入、從頭洗掉、從尾洗掉和列印。程式中的一切作業正常,但洗掉第一個節點功能。它在列印功能中引發錯誤(在下面發布了錯誤圖片)。有誰知道似乎是什么問題?洗掉最后一個節點的功能可以正常作業并完美列印。
鏈表程式:
struct Node {
int data;
Node* next;
};
void insert(Node** head,int n) //insertion method
{
Node* newNode = new Node;
newNode->data = n;
newNode->next = (*head);
(*head) = newNode;
}
Node* deleteFront(struct Node* head)//deleting first node in the list
{
if (head == NULL)
return NULL;
else
{
Node* t = head;
head = head->next;
free(t);
t = NULL;
}
return head;
}
Node* deleteEnd(struct Node* head)//deleting last node in the list
{
if (head == NULL)
return NULL;
else if (head->next == NULL) {
free(head);
head = NULL;
}
else {
Node* prev = head;
Node* prev2 = head;
while (prev->next != NULL)
{
prev2 = prev;
prev = prev->next;
}
prev2->next = NULL;
free(prev);
prev = NULL;
}
return head;
}
void printLL(Node* h)
{
while (h != NULL)
{
cout << h->data << " ";
h = h->next;
}
cout << endl;
}
int main()
{
cout << "Linked list question 2: " << endl;
//linked list question 2
Node* n = NULL;
insert(&n, 60);
insert(&n, 40);
insert(&n, 20);
printLL(n);
deleteFront(n);
cout << "after deleting first node: ";
printLL(n);
deleteEnd(n);
cout << "after deleting last element: ";
printLL(n);
}
錯誤圖片:

uj5u.com熱心網友回復:
由于您要回傳 head indeleteFront(n)并且deleteLast(n),但是您不會更新 head in main()。這就是為什么它n指向一些垃圾記憶體。main()通過存盤head在n變數中來更新您的。
int main()
{
cout << "Linked list question 2: " << endl;
//linked list question 2
Node* n = NULL;
insert(&n, 60);
insert(&n, 40);
insert(&n, 20);
printLL(n);
n = deleteFront(n);
cout << "after deleting first node: ";
printLL(n);
n = deleteEnd(n);
cout << "after deleting last element: ";
printLL(n);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/420519.html
標籤:
