【leetcode】【单链表】【147】Insertion Sort List

#include<iostream>
using namespace std;

struct ListNode {
	int val;
	ListNode *next;
	ListNode(int x) : val(x), next(NULL) {}
};

class Solution {
public:
	ListNode* insertionSortList(ListNode* head) {
		if (head == NULL || head->next == NULL)
			return head;
		ListNode* cur = head->next;
		head->next = NULL;//头结点和后面节点断开
		ListNode* temp1 = NULL;
		ListNode* beforeTemp1 = NULL;//插入点的前一节点
		ListNode* temp2 = NULL;
		while (cur){
			temp1 = head;
			beforeTemp1 = head;
			temp2 = cur;
			cur = cur->next;
			while (temp1){
				beforeTemp1 = temp1;
				temp1 = temp1->next;
				if (temp2->val < head->val){ //比头结点小
					temp2->next = head;
					head = temp2;
					break;
				}
				if (temp1 == NULL){//新插入节点的值是最大的
					temp2->next = beforeTemp1->next;
					beforeTemp1->next = temp2;
					break;
				}
				if (temp2->val < temp1->val){//找到插入点位置
					temp2->next = beforeTemp1->next;
					beforeTemp1->next = temp2;
					break;
				}
			}
		}
		return head;
	}
	ListNode* createList(ListNode* head){
		int numOfNode;
		int value;
		cout << "please input number of listNode:";
		cin >> numOfNode;
		cin >> value;
		head = new ListNode(value);
		ListNode* cur = head;
		for (int i = 1; i < numOfNode; ++i){
			cin >> value;
			ListNode* temp = new ListNode(value);
			cur->next = temp;
			cur = temp;
		}
		//cur->next = head;
		return head;
	}
	void printNode(ListNode* head){
		ListNode* cur = head;
		while (cur){
			cout << cur->val << " ";
			cur = cur->next;
		}
		cout << endl;
	}
};

int main(){
	ListNode* head = NULL;
	
	Solution solution;
	head = solution.createList(head);
	solution.printNode(head);

	head = solution.insertionSortList(head);
	solution.printNode(head);

	system("pause");
	return 0;
}



原文地址:https://www.cnblogs.com/ruan875417/p/4558298.html