您的位置:首页 > 其它

[leetcode]sort list

2015-09-08 17:34 281 查看
/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode(int x) : val(x), next(NULL) {}
* };
* Sort a linked list in O(n log n) time using constant space complexity.
*/
#include<iostream>
#include<fstream>
#include<vector>
#include<map>

using namespace std;

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

class Solution {
public:
ListNode *sortList(ListNode *head) {
if (head == NULL || head->next == NULL)return head;
map<int, vector<ListNode*>> mp;
ListNode* pnode = head;
while (pnode)
{
mp[pnode->val].push_back(pnode);
pnode = pnode->next;
}
map<int, vector<ListNode*>>::iterator it = mp.begin();
head = NULL;
ListNode* cur = NULL;
for (; it != mp.end(); it++)
{
vector<ListNode*> vec = (*it).second;
for (int i = 0; i < vec.size(); i++)
{
if (head == NULL){
head = vec[i];
cur = vec[i];
}
else{
cur->next = vec[i];
cur = cur->next;
}
}
}
cur->next = NULL;
return head;
}
};

int main(){
fstream fin("test.txt");
struct ListNode* head(0);
int val = 0;
//string s1 = "asdf";
//string s2(s1);
//if (&s1 == &s2){
//	int a = 1;
//}
while (fin >> val){
if (NULL == head){
head = new ListNode(val);
}
else {
ListNode *temp = head;
while (temp->next != NULL)
temp = temp->next;
temp->next = new ListNode(val);
}
}
Solution solution;
ListNode *new_head = solution.sortList(head);
return 0;

}


主函数里关于链表的建立。使用了new从自由存储区(堆)中分配了内存,链表一直使用到程序结束,有必要显示的用delete进行内存释放吗?

关于链表的建立能够不采用new要么malloc分配还没有,还有其他的方法你?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: