• 【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;
    }



  • 相关阅读:
    关于扩展欧几里得算法___基础,基础中的基础
    bzoj 2152聪聪可可
    poj1741 树上的点分治
    POJ1201 区间
    codevs 2756树上的路径
    zoj1260 king
    栈与队列应用:迷宫问题(DFS非最短路径)
    估值为一亿的AI核心代码
    栈与队列应用:计算前缀表达式的值
    栈与队列:循环队列算法+可执行代码
  • 原文地址:https://www.cnblogs.com/ruan875417/p/4558298.html
Copyright © 2020-2023  润新知