gpt4 book ai didi

c++ - 未排序链表段错误去除重复元素

转载 作者:行者123 更新时间:2023-11-30 01:47:40 25 4
gpt4 key购买 nike

#include<iostream>
#include<stdlib.h>
using namespace std;

struct node{

int data;
struct node* next;

};

struct node* head;

void traversalLinkedList(struct node* ptr){

if(ptr==NULL) {cout<<"null hain bhai"<<endl; return;}

while(ptr!=NULL){
cout<<ptr->data<<" ";
ptr=ptr->next;
}

}

void push(int d){

//at the front of linked list

struct node* temp=(struct node*) malloc(sizeof(struct node));

temp->data=d;
temp->next=head;

head=temp;

}


int main(){

head=NULL;

//removing duplicates from linked list

push(10);
push(11);
push(12);
push(11);
push(11);
push(12);
push(10);

traversalLinkedList(head);

struct node *ptr;

struct node* prev;

struct node* qtr;

for(ptr=head;ptr->next!=NULL;ptr=ptr->next){

prev=ptr;

for(qtr=ptr->next;qtr!=NULL;){


if(ptr->data==qtr->data){
//means duplicate nodes
prev->next=qtr->next;
free(qtr);
qtr=prev->next;
}

else{
prev=qtr;
qtr=qtr->next;
}



}

}

cout<<endl;

traversalLinkedList(head);

cout<<endl;




return 0;
}

我无法理解为什么我会收到此代码的段错误。此代码是从未排序的链表中删除重复元素。

解释一旦发现内循环节点数据等于外循环节点数据,我就使用前一个指针存储内循环指针之前的节点,使前一个指针指向内循环节点的下一个指针和内循环节点被释放。

最佳答案

for(ptr=head;ptr->next!=NULL;ptr=ptr->next)

在这一行中,当你说 ptr->next!=NULL 时,最后一个节点的空指针将被取消引用。这会导致段错误,因为您正在尝试访问空指针。

因此,只需将第二个条件设为ptr!=NULL。这已经足够了,因为您无论如何都在 for 循环的第三个条件中执行 ptr=ptr->next

关于c++ - 未排序链表段错误去除重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31260018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com