LeetCode 147 Insertion Sort List

问题:Sort a linked list using insertion sort.链表的插入。

这题的考察点:1)插入排序(以某个数为基准,一般是第一个数,将后面的数与它比较,放在前边还是后边。。。。)

                        2)其次是链表的插入,需要单向的遍历

public ListNode insertionSortList(ListNode head) {
	        if(head==null||head.next==null)return head;//head为空或只有一个数返回head
	        int minNum=Integer.MIN_VALUE;//新建一个结点作为头结点,头结点的值为整数的最小值
	        ListNode p=new ListNode(minNum);
	        p.next=head;
	        head=p;
	        p=p.next;
	        ListNode q=p.next;//从第二数开始与前边的数比较
	        ListNode r,rN;//用于遍历前部分排序好的链表,确定q指针所指节点插入的位置,每次都从头结点开始
	        while(q!=null)
	        {
	        	r=head;
	        	rN=r.next;
	        	if(q.val<p.val)
	        	{
	        		while(rN!=p && rN.val<=q.val)//rN所指值小于q,r和rN都后移
	        		{
	        				r=rN;
	        				rN=rN.next;
	        				
	        		}//跳出循环表示找到了q值插入的位置,并修改相应结点的链接
	        		r.next=q;
    				q=q.next;
    				r=r.next;
    				r.next=rN;
    				p.next=q;
	        	}else//说明q指针的值小于p,不用修改链接,指针后移
	        	{
	        		p=q;
	        		q=q.next;
	        	}
	        }
	      return head.next;  //去掉新建的节点,返回head.next
	    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值