단일 링크 된 목록의 방향을 바꾸는 프로그램을 작성하십시오. 즉, 역전 후 모든 포인터는 이제 역방향을 가리켜 야합니다.포인터 할당 중 세그먼트 오류
위의 문제를 해결하려고합니다. 나는 하나의 연결된 목록에 삽입, 검색, 삭제 및 인쇄 기능을 썼다. 이 목록에있는 모든 값을 인쇄 잘 작동
void print(list **l)
{
list *p=*l;
for(int i=0;p;i++)
{
cout<<p->item<<endl;
p=p->next;
}
}
을 다음과 같이
내 인쇄 기능입니다.
하지만 주요 기능에
나는 그것이 나에게 오류를 세그멘테이션 제공이list *p=*l;
같은 동일한 과제를 수행합니다.
void insert(list **l,int x)
{
list *p;
p=(list *)malloc(sizeof(list));
p->item=x;
p->next=*l;
*l=p;
}
인쇄 기능에서 내가 할 과제와 주요 기능의 차이는 무엇인가를 다음과 같이
main()
{
list **l;
*l=NULL;
int n;
while(cin>>n)
insert(l,n);
list *p=*l;
list *prev=NULL;
list *next;
while(p)
{
next=p->next;
p->next=prev;
prev=p;
if(next==NULL)
*l=p;
p=next;
}
print(l);
}
내 삽입 기능은 다음과 같이 내 주요 기능은 무엇입니까? 왜 인쇄 기능에 오류가 없으며 주 기능에서 세그먼트 오류가 발생합니까? 내 기능은 내가 어떤 오류가 발생하고 있지 않다이
main()
{
list **l;
*l=NULL;
int n;
while(cin>>n)
insert(l,n);
print(l);
}
같은 경우
나는 삽입하고 목록의 값을 인쇄 할 수 있어요.
'list ** l;'은 매달린 포인터이므로 '* l = NULL;'은 정의되지 않은 동작입니다. – enobayram
@enobayram 값을 올바르게 삽입하고 있습니까? – user2086900
예, 삽입 기능을 올바르게 삽입하고 있지만 C++에 대해서도 전반적인 접근 방식은 C에 대해서도 부적절합니다. 'std :: list'을 사용하지 않는 이유가 있습니까? C와 같은 코드를 만들고 싶다면'list * l = NULL;'을 사용하고'print (& l)'로 전달하면된다. –
enobayram