- 題目一:對連結串列進行排序。
- 方法一:利用陣列進行排序。效率比較低。
- 程式碼
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *sortList(ListNode *head) { vector<int> res; ListNode *temp = head; int length = 0; while (temp){ res.push_back(temp->val); temp = temp->next, length++; } sort(res.begin(), res.end()); temp = head; int i =0; while (temp && i<length){ temp->val = res[i]; temp = temp->next; i++; } return head; } };
- 程式碼
- 方法二:對連結串列進行插入排序
- 分析:這裡其實和插入排序陣列類似,但是陣列是在原陣列的基礎上面進行插入排序的,但是對於連結串列來說比較複雜,所以新建連結串列進行插入排序。插入排序顧名思義就是一個一個的將數字插入進行,插入的過程中與連結串列的所有數字進行比較,找到合適的位置進行插入,所以我們設定兩個指標,pre指向新連結串列的頭部,cur指向當前連結串列的當前節點,之後比較兩個指標的值,依次插入即可
- 程式碼:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *sortList(ListNode *head) { if(head == NULL || head->next == NULL) return head; ListNode* dummyhead = new ListNode(0); ListNode* pre = dummyhead; ListNode* cur = head; while(cur != NULL) { ListNode* next = cur->next; //維護連結串列的下一個結點 pre = dummyhead; //重置pre為新連結串列頭開始 //在當前排好的新連結串列中找到第一個大於cur->val的結點 while(pre->next != NULL && pre->next->val <= cur->val) { pre = pre->next; } //當前pre的next結點的值大於cur的值,將cur插入到pre後 cur->next = pre->next; pre->next = cur; cur = next; //cur指向原連結串列的下一個節點 } return dummyhead->next; } };
- 方法一:利用陣列進行排序。效率比較低。
(連結串列)連結串列的排序問題
相關文章
- 單連結串列的排序問題排序
- 連結串列專題——面試中常見的連結串列問題面試
- 連結串列面試題(二)---連結串列逆序(連結串列反轉)面試題
- 連結串列-雙向連結串列
- 連結串列-迴圈連結串列
- 連結串列-插入排序排序
- 連結串列歸併排序排序
- 資料結構與演算法——連結串列 Linked List(單連結串列、雙向連結串列、單向環形連結串列-Josephu 問題)資料結構演算法
- 連結串列4: 迴圈連結串列
- 連結串列-單連結串列實現
- 【圖解連結串列類面試題】移除連結串列元素圖解面試題
- 【圖解連結串列類面試題】環形連結串列圖解面試題
- 演算法基礎~連結串列~排序連結串列的合併(k條)演算法排序
- 148. 排序連結串列排序
- C語言 連結串列排序C語言排序
- 連結串列入門與插入連結串列
- javascript中的連結串列結構—雙向連結串列JavaScript
- 【LeetCode-連結串列】面試題-反轉連結串列LeetCode面試題
- 連結串列面試題(七)---合併兩個有序連結串列面試題
- 連結串列
- 連結串列面試題(四)---查詢連結串列的中間節點面試題
- 【連結串列問題】打卡8:複製含有隨機指標節點的連結串列隨機指標
- 合併K個排序連結串列排序
- 求n個排序連結串列的交集排序
- 連結串列以及golang介入式連結串列的實現Golang
- Linux核心連結串列-通用連結串列的實現Linux
- 反轉連結串列、合併連結串列、樹的子結構
- 資料結構連結串列各種問題資料結構
- 連結串列面試題(十一)---求帶環單連結串列 環的入口點面試題
- Leetcode_86_分割連結串列_連結串列LeetCode
- 【LeetCode】->連結串列->通向連結串列自由之路LeetCode
- 連結串列面試題(九)---判斷一個連結串列是否帶環面試題
- 連結串列面試題(十)---求帶環單連結串列的環的長度面試題
- 演算法:排序連結串列:歸併排序演算法排序
- 連結串列面試題(十三)---求兩個都不帶環的連結串列相交的結點面試題
- php連結串列PHP
- 連結串列操作
- 連結串列逆序