[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;

    }

};

  

你可能感兴趣的:(LeetCode)