因此,在我的鏈表列表程序中,我想要它做的是要求用戶輸入多少個數字,然後輸入數字,然後添加這些數字數字在列表的末尾。然後,它將打印列表。之後,用戶將選擇列表中元素的位置來刪除,列表將再次被打印。在列表末尾插入一個整數並在第n個位置刪除
#include <iostream>
using namespace std;
struct Node{
int data;
Node* link;
};
Node* head;
void Insert(int data){ //insert an integer at the end of the list
Node* temp = new Node();
Node* temp2 = new Node();
temp->data = data;
temp->link = NULL;
if(head = NULL){
head = temp;
return;
}
temp2 = head;
while(temp2->link != NULL){
temp2 = temp2->link;
}
temp2->link = temp;
}
void Delete(int n){ //delete an integer at nth position
Node* temp1 = new Node();
temp1 = head;
if(n == 1){ //if the first node is to be deleted
head = temp1->link; //now head points to second node
delete temp1; //delete first node
return;
}
for(int i = 0; i < n-2; i++){
temp1 = temp1->link; //temp1 points to (n-1)th node
}
Node* temp2 = temp1->link; //temp2 points to nth node
temp1->link = temp2->link; // pointing to (n+1)th node
delete temp2; //deleting nth node
}
void Print(){ //print out the list
Node* printNode = head;
cout << "List: ";
while(printNode != NULL){
cout << printNode->data;
cout << " ";
printNode = printNode->link;
}
cout << "\n";
}
int main(){
int x, count, n;
head = NULL; //start with an empty list
cout << "How many numbers? " << endl;
cin >> count;
for(int i = 0; i < count; i++){
cout << "Enter number: ";
cin >> x;
Insert(x);
}
Print();
cout << "Enter position to delete: ";
cin >> n;
Delete(n);
Print();
return 0;
}
接受第一個數字後,程序停止工作。我可以知道我在哪裏做錯了代碼,我能做些什麼來使代碼更有效率?提前致謝。
只有掠過代碼當前'如果(head = NULL)'應該是'if(head == NULL)'。不知道這是否解決了整個問題,但它是一個開始 – tomasbasham
@tomasbasham這是一個很大的facepalm我現在已經修復了。 – nisyedlah
沒問題,我可以指出,保存一個引用到鏈表的尾部會更有效率,而不是有t o每次插入數字時都要穿過它 – tomasbasham