在对链表进行排序时,可以使用哨兵位来创建虚拟头节点,我们需要用两个指针来对比前后的值是否是按排序的大小排列的,如果不是的话就可以将他们两个调换,同时还需要一个指针来遍历一下链表。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *insertionSortList(struct ListNode *head) {
if (head == NULL) {
return head;
}
struct ListNode* vhead=(struct ListNode*)malloc(sizeof(struct ListNode));
vhead->next=head;
vhead->val=0;
struct ListNode* last=head;
struct ListNode* cur=head->next;
while(cur)
{
if(last->val<=cur->val)
last=last->next;
else
{
struct ListNode* prev=vhead;
while(prev->next->val<=cur->val)
{
prev=prev->next;
}
last->next=cur->next;
cur->next=prev->next;
prev->next=cur;
}
cur=last->next;
}
return vhead->next;
}
1494

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



