您的位置:首页 > 其它

LeetCode 147 Insertion Sort List

2015-03-09 10:21 357 查看
问题: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
	    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: