您的位置:首页 > 其它

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

2015-05-25 16:17 519 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: