快排-单链表实现

来源:互联网 发布:淘宝自动发货系统 编辑:程序博客网 时间:2024/06/07 03:06
/*************************************************************************    > File Name: main.cpp    > Author:     > Mail:     > Created Time: 三  7/26 18:43:04 2017 ************************************************************************/#include<iostream>#include<fstream>using namespace std;struct Node{    int val;    Node *next;    Node(int key,Node *pnext):val(key),next(pnext){}};Node *quick_sort_list(Node* head, Node* tail){    if(head==NULL||head->next==NULL||head==tail)        return head;    Node *p1 = head;    Node *p2 = head->next;    int key = head->val;    while (p2 != NULL&&p2 != tail)    {        if (p2->val <= key)        {            p1 = p1->next;            swap(p1->val, p2->val);        }        p2 = p2->next;    }    swap(head->val, p1->val);    quick_sort_list(head, p1);    quick_sort_list(p1->next, p2);    return head;}int main(){    ifstream fin("data.txt");    int num;    Node *head=new Node(0,NULL);    Node *p=head;    while(!fin.eof())    {        fin>>num;        cout<<"num is"<<num<<" ";        p->next=new Node(num,NULL);        p=p->next;    }    Node *q=head->next;    while(q!=NULL)    {        cout<<q->val<<" ";        q=q->next;    }    quick_sort_list(head->next, p->next);    q=head->next;    while(q!=NULL)    {        cout<<q->val<<" ";        q=q->next;    }    return 0;}

总结:
上述单链表的实现,一定要加上结束条件:

 if(head==NULL||head->next==NULL||head==tail)        return head;

否则,运行出现segmentation fault。
出现segmentation fault用gdb调试,很难调!!!

原创粉丝点击