首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并排序lin链表给出分段错误

合并排序lin链表给出分段错误
EN

Stack Overflow用户
提问于 2022-02-28 07:38:20
回答 1查看 56关注 0票数 -3

我使用了合并排序算法来对链接列表进行排序,但是当我应用它时,它就会产生一个分段错误(内核被丢弃)。帮我调试一下。

代码语言:javascript
复制
#include<iostream>
using namespace std;

class Node{

    public:
    int data;
    Node *next;

    Node(int data){
        this->data = data;
        next = NULL;
    }

};

Node *takeInput(int n){

    int data;
    Node *head = NULL;
    Node *tail = NULL;

    while(n>0){

        cin >> data;
        Node *newNode = new Node(data);

        if(head == NULL){
            head = newNode;
            tail = newNode;
        }else{
            tail->next = newNode;
            tail = newNode;
        }

        n--;
    }

    return head;
}


Node *merge(Node *head , Node *head2){

    Node *newhead = NULL;
    Node *newTail = NULL;

    while(head != NULL && head2 != NULL){

        int x = head->data;
        int y = head2->data;
        if(x < y){

            if(newhead == NULL){
                newhead = head ;
                newTail = head ; 
            }else{
                newTail->next = head;
                newTail = head;
            }
            head = head->next;

        }else{

            if(newhead == NULL){
                newhead = head2 ;
                newTail = head2 ; 
            }else{
                newTail->next = head2;
                newTail = head2;
            }
            head2 = head2->next;

        }

    }

    if(head == NULL){
        newTail->next = head2;
    }else{
        newTail->next = head;
    }

    return newhead;
}

Node *mergeSort(Node *head, int n){
    
    if(n == 0){
        head->next =NULL;
        return head;
    }else{

        int t = (n-1)/2;
        Node *temp = head;
        while(t>0){
        temp = temp->next;
        t--;
        }

        Node *head2 = temp->next;
        temp->next = NULL;

        head = mergeSort(head,n/2);
        int n2 = n - n/2 ;
        head2 = mergeSort(head2,n2);
        Node *newHead = merge(head,head2);

        return newHead;
    }
}


void print(Node *head){

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

}

int main()
{
    int n;
    cin >> n ;
    Node *head = takeInput(n);
    Node *newHead = mergeSort(head,n);
    print(newHead);
 return 0;
}

我试着调试,但没能找出是什么错。我正在检查其中一个注释中指定的nullptrtemp,让我们看看它是否有效。

EN

回答 1

Stack Overflow用户

发布于 2022-03-01 03:57:37

最后,我调试了它。我将mergeSort的基本大小写替换为:

代码语言:javascript
复制
if(temp == NULL || temp->next == NULL){
    return temp;
}

而且起作用了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71291863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档