/*************************************************************************
> 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调试,很难调!!!