链表——链表的插入排序和选择排序

来源:互联网 发布:阿里云设置二级域名 编辑:程序博客网 时间:2024/06/07 20:02

链表的插入排序:

public class Solution {    public ListNode insertionSortList(ListNode head) {        if(head == null||head.next ==null)            return head;                ListNode help=new ListNode(0);//辅助结点;        ListNode cur=head;        while(cur!=null)            {            ListNode next=cur.next;//记录下一个结点;            ListNode pre=help;//每次都遍历一次新链表,找到 cur结点所要插入的位置;            while(pre.next!=null&&pre.next.val<cur.val)                {                pre=pre.next;            }            cur.next=pre.next;            pre.next=cur;            cur=next;        }        return help.next;    }}

链表的选择排序:

选择排序是从未排序的部分中找到最小值,然后放在排好序部分的尾部,逐渐将未排序的部分缩小,最后全部变为排好序的部分。

本题使用了两个辅助头节点。

public class Solution {    public ListNode insertionSortList(ListNode head) {        if(head == null||head.next == null)            return head;        ListNode help=new ListNode(0);        help.next=head;        ListNode dump=new ListNode(0);        ListNode temp=dump;        while(help.next!=null)            {            ListNode min_pre=help;            ListNode cur=help;            while(cur.next!=null)                {                if(cur.next.val<min_pre.next.val)                    min_pre=cur;                cur=cur.next;            }            temp.next=min_pre.next;            min_pre.next=min_pre.next.next;            temp=temp.next;        }        temp.next=null;        return dump.next;    }}


0 0
原创粉丝点击