使用插入排序排序一个链表。

本文介绍了如何使用插入排序算法对链表进行排序,详细阐述了排序的思路,并提供了相应的代码实现。
摘要由CSDN通过智能技术生成

题目:

使用插入排序排序一个链表。
思路:

什么是插入排序?

每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。

新建一个链表用于存放有序结果;指定一个遍历指针用于遍历原始无序链表,指向当前正在排序的节点;指定一个位置指针用于遍历有序链表,查找插入的位置,注意被排序节点与位置指针的后一个节点进行比较。

代码:
public class ListNode {
	int val;
	ListNode next;
	ListNode(int x) {
		val = x;
		next = null;
	}
}

public ListNode insertionSortList(ListNode head) {
		if(head==null || head.next==null) return head;
		
		ListNode cur=head;	//遍历指针,指向正在排序的节点
		ListNode helper=new ListNode(0);  //一个空链表,存放顺序结果    调用构造函数
		/*因为可能待插入的节点可能在第一个节点的前面,
		因此另外创建一个头结点,指向已经排好序的链表的第一个节点。
		这样可以每次插入新的节点的时候,将上面所提到的记录节点初始化为新创建的头结点,
		这样便于在第一个节点前面插入新节点。*/		
		ListNode pre;	
		 
		while(cur!=null)
		{
		    ListNode next=cur.next;
		    pre=helper;
		    while(pre.next!=null && pre.next.val<cur.val)
		    	{
		    		pre=pre.next;
		    	}
		    cur.next=pre.next;
		    pre.next=cur;
		    cur=next;
		 }
		return helper.next;

	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值