[LeetCode]Insertion Sort List

Sort a linked list using insertion sort.

思考:画图帮助理解,考虑以下情况:空链表,单结点链表,两个结点(第二个结点大于或小于第一个),多个结点。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *insertionSortList(ListNode *head) {
        // IMPORTANT: Please reset any member data you declared, as
        // the same Solution instance will be reused for each test case.
        ListNode *p,*q,*r;
		p=head;
		if(!head) return NULL;
		while(p->next)
		{
			q=p->next;      //q当前待移动结点
			r=head;         //r-p已排序
			
			while(r->next->val<q->val&&r!=p)
				r=r->next;
			if(r==p&&r->val<=q->val)
			{
				p=p->next;
			}
			else if(r==p)
			{
				r->next=q->next;
				q->next=r;
				head=q;
			}
			else if(r->val>q->val)
			{
				p->next=q->next;
				q->next=r;
				head=q;
			}
			else
			{
				p->next=q->next;
				q->next=r->next;
				r->next=q;
			}
		}
		return head;
    }
};

  

posted @ 2013-11-14 17:17  七年之后  阅读(267)  评论(0编辑  收藏  举报