1. 問題描述
對鍊錶進行插入排序。
插入排序的動畫演示如上。從第乙個元素開始,該鍊錶可以被認為已經部分排序(用黑色表示)。
每次迭代時,從輸入資料中移除乙個元素(用紅色表示),並原地將其插入到已排好序的鍊錶中。
插入排序演算法:
插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。
每次迭代中,插入排序只從輸入資料中移除乙個待排序的元素,找到它在序列中適當的位置,並將其插入。
重複直到所有輸入資料插入完為止。
示例 1:
輸入:4->2->1->3輸出:1->2->3->4示例 2:
輸入:-1->5->3->4->0輸出:-1->0->3->4->52. **實現以前陣列插入排序,是兩重迴圈,第一重是遍歷整個陣列,第二個就是反向迴圈,找到前面第乙個小於當前數的值,並插到它後面。但鍊錶無法反向,所以第二重迴圈就乾脆正向遍歷一次,找到第乙個大於當前結點值的結點,並插到它前面。
用p、q分別記錄當前結點cur的前、後結點。用pre遍歷一次找到要插入位置的前驅結點,若需要交換結點位置,則把cur插入到pre後面,再連線p和q;下一輪p不需要移動,q往後移乙個。若不需要交換結點位置,下一輪p和q均需要後移乙個。(q相當於記錄下一輪的cur)
/**
* definition for singly-linked list.
* public class listnode
* }*/class solution
cur = q;
}return newhead.next;}}
對鍊錶進行插入排序
對鍊錶進行插入排序。插入排序演算法 插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次迭代中,插入排序只從輸入資料中移除乙個待排序的元素,找到它在序列中適當的位置,並將其插入。重複直到所有輸入資料插入完為止。示例 1 輸入 4 2 1 3 輸出 1 2 3 4 示例 ...
對鍊錶進行插入排序
描述 對鍊錶進行插入排序。插入排序的動畫演示如上。從第乙個元素開始,該鍊錶可以被認為已經部分排序 用黑色表示 每次迭代時,從輸入資料中移除乙個元素 用紅色表示 並原地將其插入到已排好序的鍊錶中。插入排序演算法 插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次迭代中,...
對鍊錶進行插入排序
題目 示例 1 輸入 4 2 1 3 輸出 1 2 3 4 示例 2 輸入 1 5 3 4 0 輸出 1 0 3 4 5 解題思路 需要維護幾個引用來記錄當前已排序的和正在排序的節點,當找到大於當前要排序的節點值後進行插入操作 definition for singly linked list.pu...