单链表实现快排
来源:互联网 发布:花衣吹笛手 知乎 编辑:程序博客网 时间:2024/05/21 01:47
地址的地址,即指针的指针,懂不懂?
思想:将一个链表分为两个链表,然后递归分解,再合并!
#include <iostream>using namespace std;struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} };class Solution {public: void QuickSort(ListNode *&head,ListNode *&end){ ListNode *begin1,*begin2,*end1,*end2; begin1=begin2=end1=end2=NULL; if(head==NULL) return; ListNode *p; p=head->next; head->next=NULL; while(p!=NULL){ if(p->val < head->val){ if(!begin1) { begin1=end1=p; p=p->next; end1->next=NULL; } else{ end1->next=p; end1=p; p=p->next; end1->next=NULL; } } else{ if(!begin2) { begin2=end2=p; p=p->next; end2->next=NULL; } else{ end2->next=p; end2=p; p=p->next; end2->next=NULL; } } } QuickSort(begin1,end1); QuickSort(begin2,end2); if(end1 && begin2){ end1->next = head; head->next= begin2; head=begin1; end=end2; }else if(end1){ end1->next = head; end=head,head=begin1; }else if(begin2){ head->next=begin2; end=end2; } } ListNode *sortList(ListNode *head) { ListNode *p=head; if(p==NULL || p->next==NULL) return head; while(p->next != NULL){ p=p->next; } QuickSort(head,p); return head; }};void present(ListNode *head){ ListNode *p=head; while(p!=NULL){ cout<<p->val<<' '; p=p->next; } cout<<endl;}int main(){ Solution SS; ListNode *head; ListNode list1(1); ListNode list2(2); ListNode list3(1); head=&list1; list1.next=&list2; list2.next=&list3; present(head); head=SS.sortList(head); present(head); //cout << "Hello world!" << endl; return 0;}
0 0
- 单链表实现快排
- 快排-单链表实现
- 单链表的快排实现
- 单链表的快排实现
- 基于单链表的快排实现
- scheme实现快排
- 快排c++实现
- 快排简单实现
- Python实现快排
- 快排-java实现
- 实现的快排
- 快排实现;
- 快排实现
- 快排java实现
- javascript实现快排
- 快排:Swift实现
- 快排:Swift实现
- 快排--java实现
- js变量的作用域
- 【Cocos2d-x】C++自定义线程安全消息管理
- 搭个简单Jersey+spring工程
- htmlunit网络爬虫相关
- nodeJs基础
- 单链表实现快排
- Codeforces Round #277.5 (Div. 2)
- 好无赖哦啊,无赖的人生
- IOS NSStream.h
- Mysql自带profiling性能分析工具
- JdbcHelper 如何加载数据源
- 理解同步与异步
- 算法笔记十:计算第I大的数
- 重力效果