所以,我试图在C++上实现这段代码,它在链表中的特定位置插入一个元素,但我一直遇到分段错误。我已经把它缩小到主函数中的l.push(a(语句,但无法纠正它。
n——节点数。则插入链接列表。data—要插入到列表中的数据。pos—要插入数据的位置。
任何关于如何纠正这一问题的帮助以及如何避免此类代码中的分段错误的建议都将不胜感激:(
//INSERTING ELEMENT AT A SPECIFIC POSITION IN A LINKED LIST - HACKERRANK
#include<iostream>
#include<cstdio>
#include<vector>
#include<limits>
#include<algorithm>
#include<cmath>
using namespace std;
struct Node{
int data;
Node* next;
};
struct Linkedlist{
Node* head;
Linkedlist(){
head= NULL;
}
void push(int data){
Node* temp = new Node;
temp->data = data;
temp->next = NULL;
Node* curr = head;
while(curr->next!=NULL)
curr= curr->next;
curr->next = temp;
}
void pushpos(int data,int pos){
Node *curr = head;
int curr_index = 0;
while((pos-1)!=curr_index){
curr=curr->next;
curr_index++;
}
Node *temp = new Node;
temp->data = data;
temp->next = curr->next;
curr->next = temp;
}
void print(){
Node *curr = head;
while(curr!=NULL){
cout<<curr->data<<endl;
curr = curr->next;
}
}
};
int main(){
int n,i,a,data,pos;
Linkedlist l;
cin>>n;
for(i=0;i<n;i++){
cin>>a;
l.push(a);
}
cout<<"pushed";
cin>>data>>pos;
l.pushpos(data,pos);
l.print();
return 0;
}
您在这里犯了几个错误。
1.在您的Push API中,您没有检查Null。
void push(int data) {
Node* temp = new Node;
temp->data = data;
temp->next = NULL;
if (head == NULL)
head = temp;
else {
Node* curr = head;
while (curr->next != NULL)
curr = curr->next;
curr->next = temp;
}
}
- 在pushpos中,您没有检查失败条件,如NULL,以及pos大于链表本身的大小