问题描述
对一个单链表进行插入排序,head指向第一个结点。
代码
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *insertionSortList(ListNode *head) { if(!head||head->next==NULL) return head; ListNode *pstart=new ListNode(0);//添加一个头指针以方便处理,设所有节点数据大于0 pstart->next=head; ListNode *preCur=head,*cur=head->next; while(cur!=NULL) { ListNode *prePos=pstart,* pos=pstart->next; while(pos->val<cur->val) { prePos=prePos->next;//prePos指向带插入位置的前方 pos=pos->next;//pos指向待插入位置的后方 } if(pos!=cur) { preCur->next=cur->next; cur->next=pos; prePos->next=cur; //preCur不变 cur=preCur->next; } else { preCur=cur; cur=cur->next; } } head=pstart->next; delete pstart; return head; } };
时间复杂度
O(N^2),相对于顺序存储减少移动次数。
leetcode:Insert Sort List
时间: 2024-11-02 12:32:24