0
最近,我一直在練習一些鏈接列表編碼問題。我剛開始使用unordered_set。問題是,「編寫代碼以從未排序的鏈接列表中刪除重複項」。我爲此使用了unordered_set。但是當我嘗試初始化鏈表時,我遇到了「coredump」的問題。在「CodePad」(這是一個在線C++編譯器)中執行鏈表操作時的核心轉儲
當我註釋掉populateList的最後3行時,它顯示數組。當我嘗試訪問populateList中的頭時,它顯示核心轉儲。
這是我寫的全部代碼。我已經寫在鍵盤網站上。
#include <iostream>
#include<vector>
#include<string.h>
#include<math.h>
#include<sstream>
#include<string>
#include<stdio.h>
#include<algorithm>
#include<unordered_set>
using namespace std;
struct Node
{
int data;
Node *next;
};
Node *head=NULL;
void populateList(Node *head)
{
int arr[]={7,1,2,3,4,5,4,3,5,7,3,9,3,7,3,6,2,5,7,4};
cout<<"\n\n";
int n=sizeof(arr)/sizeof(int);
for(int i=0;i<n;i++)
{
cout<<arr[i]<<" ";
}
Node *ptr=head;
如果我在for循環中註釋掉下面的內容,一切都會順利進行。
for(int i=0;i<n;i++)
{
ptr->data=arr[i];
ptr->next=NULL;
ptr=ptr->next;
}
}
int main()
{
Node *ptr=head, *prev=head;
populateList(head);
unordered_set<int> A;
while(ptr!=NULL)
{
cout<<ptr->data<<" ";
}
while(ptr!=NULL)
{
if(A.find(ptr->data)==A.end())
{
A.insert(ptr->data);
}
else
{
prev->next=ptr->next;
delete ptr;
ptr=prev->next;
}
prev=ptr;
ptr=ptr->next;
}
ptr=head;
cout<<"\n\n";
while(ptr!=NULL)
{
cout<<ptr->data<<" ";
}
return 0;
}
有一個可疑的缺乏該代碼中的「新」。 – molbdnilo
你可以調用'populateList(head)',其中'head == NULL',然後繼續前進,並用'head-> data = ...'取消引用這個'NULL'指針;' –
將以前的註釋內容放入其他字:你沒有使用operator new來分配列表的節點。 – Fureeish