分段错误如何修复函数之间的反向?

时间:2019-07-06 13:41:27

标签: c++

在这里,我尝试对给定链接列表的子列表进行反向处理的非递归解决方案,因为我们获得了链接列表以及位置m和n。我们需要将链表从位置m反转到n,但这会导致分段错误 下面给出了我的代码,其中反向功能有一些分段错误...

// C program to reverse a linked list 
// from position m to position n 
#include <stdio.h> 
#include <stdlib.h> 

// Linked list node 
struct ListNode { 
    int data; 
    struct ListNode* next; 
}; 

ListNode* reverseBetween(ListNode* A, int B, int C) {

     ListNode *p=A,*q=A,*cur,*pre,*nex;
     int i=1,j=1;
     if(C-B==0)
     return A;
     if(B!=1)
     {
     while(i!=B-1)
     {
         p=p->next;
         i++;

     }}
     while(j!=C)
     {
         q=q->next;
         j++;

     }
     if(B==1)
     {
         cur=A;
         A=q;
     }
    //  p->next->next=q->next->next
    //  p->next=q->next;
    else{
     cur=p->next;

     p->next=q;
     }
     nex=cur->next;
     cur->next=q->next;
     while(nex!=q->next||q!=cur){
     p=cur;
     cur=nex;
     nex=cur->next;
     cur->next=p;}
          return A;
}
void print(struct ListNode* A) 
{ 
    while (A != NULL) { 
        printf("%d ", A->data); 
        A = A->next; 
    } 
    printf("\n"); 
} 

// function to add a new node at the 
// begining of the list 
void push(struct ListNode** A_ref, int new_data) 
{ 
    struct ListNode* new_node = new ListNode; 
    new_node->data = new_data; 
    new_node->next = (*A_ref); 
    (*A_ref) = new_node; 
} 

// Driver code 
int main() 
{ 
    struct ListNode* A= NULL; 
    push(&A, 70); 
    push(&A, 60); 
    push(&A, 50); 
    push(&A, 40); 
    push(&A, 30); 
    push(&A, 20); 
    push(&A, 10); 
    reverseBetween(A, 3, 6); 
    print(A); 
    return 0; 
} 

错误消息分段错误(SIGSEGV)

0 个答案:

没有答案