LeetCode 147:Insertion Sort List

Datetime:2016-08-23 01:22:21          Topic: LeetCode           Share

Sort a linked list using insertion sort.

//链表插入排序
//对于当前遍历的cur点,判断前面是否可以插入,若可以插入,则当前遍历点cur指向插入点的后一点,插入点的前一点指向cur
//然后再将前面已经排好序的链表的最后一个节点,指向cur的下一个节点。
//利用临时变量tmp记录当前遍历节点的下一个节点,以便继续遍历下个节点

class Solution {
public:
	ListNode* insertionSortList(ListNode* head) {
		ListNode dummy(INT_MIN);
		ListNode*  cur = head;
		while (cur !=nullptr)
		{
			ListNode* pos = findInsertPos(&dummy, cur->val);
			ListNode* tmp = cur->next; //记录当前遍历节点的下一个节点,以便继续遍历下个节点
			cur->next = pos->next;
			pos->next = cur;
			cur = tmp;
		}
		return dummy.next;
	}
	//找到当前遍历点cur的插入位置
	ListNode* findInsertPos(ListNode *head, int x){
		ListNode* pre=nullptr ;
		ListNode* cur= head;
		while (cur !=nullptr && cur->val<=x)
		{
			pre = cur;
			cur = cur->next;
		}
		return pre;
	}
};




About List