码迷,mamicode.com
首页 > 其他好文 > 详细

[leetcode]sort list

时间:2014-08-18 14:31:02      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:leetcode   c++   

/**
* 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进行分配吗,有其他的方法吗?


[leetcode]sort list,布布扣,bubuko.com

[leetcode]sort list

标签:leetcode   c++   

原文地址:http://blog.csdn.net/u011409995/article/details/38659735

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!