链表归并排序
来源:互联网 发布:mac系统修复软件 编辑:程序博客网 时间:2024/05/29 10:39
package com.Tecent.success.sg;import java.util.Scanner;/** * 归并排序链表版 * * @author Dell * */class ListNode{public int val;public ListNode next;public ListNode(int val){ this.val=val;}}public class GuiBing2 {public static ListNode MergeSort(ListNode head){ if(head==null||head.next==null) //很关键,只剩下一个元剩时要单独处理 return head; ListNode mid= findmid(head); ListNode post=mid.next; mid.next=null; return merge(MergeSort(head),MergeSort(post));}public static ListNode findmid(ListNode head){ if(head==null||head.next==null) return head; ListNode slow=head; ListNode fast=head; while(fast.next!=null&&fast.next.next!=null) { slow=slow.next; fast=fast.next.next; }return slow;}public static ListNode merge(ListNode list1, ListNode list2){ if(list1==null&&list2!=null) return list2; if(list1!=null&&list2==null) return list1; if(list1==null&&list2==null) return null; ListNode p=list1; ListNode q=list2; ListNode result=new ListNode(-1); ListNode r=result; while(p!=null&&q!=null) { if(p.val<q.val){ r.next=p; p=p.next; } else { r.next=q; q=q.next; } r=r.next; }if(p!=null)r.next=p;if(q!=null) r.next=q; return result.next;}public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();ListNode head=new ListNode(-1);ListNode p=head;for(int i=0;i<n;i++){ListNode temp=new ListNode(sc.nextInt());p.next=temp;p=p.next;} ListNode result=MergeSort(head.next); while(result!=null) { System.out.print(result.val+" "); result=result.next; }}}
阅读全文
0 0
- 链表归并排序
- 链表归并排序
- 链表归并排序
- 链表归并排序
- 链表归并排序
- 链表归并排序
- 链表归并排序
- 归并排序链表
- 链表归并排序
- 链表归并排序
- 链表归并排序
- 链表归并排序
- 链表排序 归并排序
- 链表排序--归并排序
- 单向链表归并排序
- 单向链表归并排序
- 链表的归并排序
- 链表的归并排序
- mvn配置settings文件
- Spark-电影推荐系统
- 机器学习课程中遇到的一些名词解释
- 监督学习最常见的四种算法
- keras修改backend
- 链表归并排序
- Mybatis的接口映射、接口的注解映射和自定义传参
- sql之left join、right join、inner join的区别
- iOS实现从后台切换到前台有毛玻璃效果
- ios Array 数组的valueForkeypath 快速的处理以及数组的拆分
- Java线程同步--synchronized的用法
- shell ——find
- 关于Java中equal函数和==的一些区别
- 简单web搭建