c++ 不插入重复元素但也不排序_【每日一题】125. 对链表进行插入排序
生活随笔
收集整理的這篇文章主要介紹了
c++ 不插入重复元素但也不排序_【每日一题】125. 对链表进行插入排序
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
關(guān)注我們獲取更多計算機(jī)考研信息
????public?ListNode?insertionSortList(ListNode?head)?{
????????if(head?==?null)return?head;??//判空
????????ListNode?pre?=?head;??????????//雙指針維護(hù)前序
????????ListNode?cur?=?head.next;
????????while(cur?!=?null){
????????????if(cur.val?>=?pre.val){???//如果當(dāng)前結(jié)點(diǎn)比上一個節(jié)點(diǎn)大,就沒必要移動了,
????????????????pre?=?pre.next;???????//只需要移動一位當(dāng)前節(jié)點(diǎn)和維護(hù)的前序節(jié)點(diǎn)。
????????????????cur?=?cur.next;
????????????????continue;
????????????}
????????????pre.next?=?cur.next;?????//?不然的話,根據(jù)題意,把需要重定位的節(jié)點(diǎn)獨(dú)立出來。
????????????cur.next?=?null;
????????????if(cur.val?//特殊處理,如果當(dāng)前節(jié)點(diǎn)比head節(jié)點(diǎn)還小,那就直接插在頭節(jié)點(diǎn)前,更新head
????????????????cur.next?=?head;
????????????????head?=?cur;
????????????????cur?=?pre.next;
????????????????continue;
????????????}
????????????ListNode?c?=?head.next;???//如果以上既不比上一個節(jié)點(diǎn)大,又不比頭節(jié)點(diǎn)小,那就是中間常規(guī)插入了。
????????????ListNode?p?=?head;
????????????while(cur.val?>?c.val){???//找到合適的插入位置,p--->c????p--->??插這??--->c
????????????????p?=?c;
????????????????c?=?c.next;
????????????}
對鏈表進(jìn)行插入,
插入排序算法:
插入排序是迭代的,每次只移動一個元素,直到所有元素可以形成一個有序的輸出列表。
每次迭代中,插入排序只從輸入數(shù)據(jù)中移除一個待排序的元素,找到它在序列中適當(dāng)?shù)奈恢?#xff0c;并將其插入。
重復(fù)直到所有輸入數(shù)據(jù)插入完為止。
示例 1:
輸入: 4->2->1->3
輸出: 1->2->3->4
示例 2:
輸入: -1->5->3->4->0
輸出: -1->0->3->4->5
……? 思考時間……
如果你想好答案了
請查看代碼實(shí)現(xiàn)
▼
代碼實(shí)現(xiàn)
class?Solution?{????public?ListNode?insertionSortList(ListNode?head)?{
????????if(head?==?null)return?head;??//判空
????????ListNode?pre?=?head;??????????//雙指針維護(hù)前序
????????ListNode?cur?=?head.next;
????????while(cur?!=?null){
????????????if(cur.val?>=?pre.val){???//如果當(dāng)前結(jié)點(diǎn)比上一個節(jié)點(diǎn)大,就沒必要移動了,
????????????????pre?=?pre.next;???????//只需要移動一位當(dāng)前節(jié)點(diǎn)和維護(hù)的前序節(jié)點(diǎn)。
????????????????cur?=?cur.next;
????????????????continue;
????????????}
????????????pre.next?=?cur.next;?????//?不然的話,根據(jù)題意,把需要重定位的節(jié)點(diǎn)獨(dú)立出來。
????????????cur.next?=?null;
????????????if(cur.val?//特殊處理,如果當(dāng)前節(jié)點(diǎn)比head節(jié)點(diǎn)還小,那就直接插在頭節(jié)點(diǎn)前,更新head
????????????????cur.next?=?head;
????????????????head?=?cur;
????????????????cur?=?pre.next;
????????????????continue;
????????????}
????????????ListNode?c?=?head.next;???//如果以上既不比上一個節(jié)點(diǎn)大,又不比頭節(jié)點(diǎn)小,那就是中間常規(guī)插入了。
????????????ListNode?p?=?head;
????????????while(cur.val?>?c.val){???//找到合適的插入位置,p--->c????p--->??插這??--->c
????????????????p?=?c;
????????????????c?=?c.next;
????????????}
微信關(guān)注“字節(jié)408考研”,
免費(fèi)獲取各院校計算機(jī)軟件考研信息與專業(yè)課資料!
總結(jié)
以上是生活随笔為你收集整理的c++ 不插入重复元素但也不排序_【每日一题】125. 对链表进行插入排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vs2015安装python3.6.8,
- 下一篇: C++标准输入流、输出流以及文件流