
思路:
1.首先将链表中的元素,遍历插入vector中,
2. 将vector升序处理;
3.一边从尾到头遍历vecctor,一边将遍历的元素插入链表;
疑问:已经升序完成了,为什么还要从尾到头插入链表,这里好像是因为链表创建节点是从后往前的。
上代码:
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类 the head node
* @return ListNode类
*/
ListNode* sortInList(ListNode* head)
{
// write code here
ListNode *newlist=NULL;
vector<int> res;
ListNode *list=head;
if(list==NULL||list->next==NULL) return NULL;
//将链表元素插入vector
while(list!=NULL)
{
res.push_back(list->val);
list=list->next;
}
//升序
sort(res.begin(),res.end());
//从后往前插入链表节点
for(int i=res.size()-1;i>=0;i--)
{
ListNode *list=new ListNode(res[i]);
list->next=newlist;
newlist=list;
}
return newlist;
}
};
该博客介绍了如何使用C++对链表进行排序。首先,将链表元素转换为vector并升序排列,然后从后往前将排序后的元素插入新的链表,以保持链表结构。这种方法适用于链表节点的后向构建。
1万+

被折叠的 条评论
为什么被折叠?



