Leetcode 147 對鍊錶進行排序

2021-09-24 14:48:02 字數 1092 閱讀 2600

對鍊錶進行插入排序。

插入排序演算法:

插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。

每次迭代中,插入排序只從輸入資料中移除乙個待排序的元素,找到它在序列中適當的位置,並將其插入。

重複直到所有輸入資料插入完為止。

示例 1:

輸入:4->2->1->3

輸出:1->2->3->4

到了鍊錶,我們發現乙個問題,那就是鍊錶不能從後往前遍歷,這就很尷尬了。我本來是嘗試找到乙個需要移動的節點(即該節點的值比前驅節點的值小),從前往後遍歷,直到找到乙個節點值比它大時插入到這個節點前面,然而實現了很久發現**又臭又長,關鍵是還總有測試用例不通過,最後還是放棄了。

看了答案發現思路應該是建立乙個輔助的新鍊錶,並且使用乙個指標遍歷原鍊錶,每次將原煉表中的乙個節點插入到新鍊錶的合適位置(即該節點的值大於新煉表上的節點的值,又小於後一節點的值)。最後將新鍊錶的頭部返回即可。**如下,做了詳細的注釋,應該很容易看懂。

1

class

listnode 7}

8/**

9* 鍊錶插入排序

10*

*/11

public

listnode insertionsortlist(listnode head)

3031

大於 cur.val,此時應該把cur插入到pre後

32//

儲存原鍊錶當前節點的下一節點

33 listnode tmp =cur.next;

34//

把cur插入到pre之後

35 cur.next =pre.next;

36 pre.next =cur;

3738

//cur指標後移一位

39 cur =tmp;40}

41return

ans.next;

42 }

LeetCode 147 對鍊錶進行插入排序

插入排序演算法 插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次迭代中,插入排序只從輸入資料中移除乙個待排序的元素,找到它在序列中適當的位置,並將其插入。重複直到所有輸入資料插入完為止。方法1 嚴格按照演算法說明,在原始列表中進行操作,利用4個鍊錶指標分別表示當前元...

LeetCode147 對鍊錶進行插入排序

對鍊錶進行插入排序。插入排序的動畫演示如上。從第乙個元素開始,該鍊錶可以被認為已經部分排序 用黑色表示 每次迭代時,從輸入資料中移除乙個元素 用紅色表示 並原地將其插入到已排好序的鍊錶中。插入排序演算法 插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次迭代中,插入排...

leetcode 147 對鍊錶進行插入排序

對鍊錶進行插入排序 插入排序演算法 插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次迭代中,插入排序只從輸入資料中移除乙個待排序的元素,找到它在序列中適當的位置,並將其插入。重複直到所有輸入資料插入完為止。思路 鍊錶的插入排序,不能像陣列類的插入排序,由後往前找,所...