题目:
Sort a linked list using insertion sort.
解答:
千万不要给链表插入排序啊 真TM的麻烦
先从链表中删除一个节点 然后把被删除节点插入到链表中,关键判断什么时候更新链表的有序尾。。。
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *tail;
ListNode *insertionSortList(ListNode *head) {
if (head == NULL)
return head;
tail = head;
while(tail->next != NULL)
{
ListNode *node = tail->next;
tail->next = tail->next->next;
head = insert(head, node);
}
return head;
}
ListNode* insert(ListNode *head, ListNode *node)
{
if (node->val <= head->val)
{
node->next = head;
head = node;
}
else
{
ListNode *temp = head;
while (1)
{
if ((temp == tail) ||(temp->val < node->val && temp->next->val >= node->val))
{
node->next = temp->next;
temp->next = node;
<span style="white-space:pre"> </span>//特别注意在这里更新尾部
if (temp == tail)
tail = node;
break;
}
else
{
temp = temp->next;
}
}
}
return head;
}
};
本文详细介绍了如何使用插入排序算法对链表进行排序,并通过示例代码展示了具体实现过程。重点在于理解如何在链表中高效地进行节点的插入操作,确保排序后的链表保持有序。

375

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



