题意:
解题思路:
思路:[遍历n个节点,每个节点遍历n次,时间复杂度O(n2)]1. 定义虚拟dummy节点,指向头节点,定义头节点为cur;2. 扫描链表,前后节点进行比较,如果前面元素u小于后面p->next,v,则需要把u插入到p后面,v前面:p->next = 2 ,插入0 => [p->next = 0, 0->next = 2] => p->0->2;3. 直到最后节点为空退出;
PHP代码实现:
/** * Definition for a singly-linked list. * class ListNode { *     public $val = 0; *     public $next = null; *     function __construct($val) { $this->val = $val; } * } */class Solution {    /**     * @param ListNode $head     * @return ListNode     */    function insertionSortList($head) {        $dummy = new ListNode(0);        $cur = $head;        while ($cur != null) {            $next = $cur->next;            $p = $dummy;            while ($p->next != null && $cur->val >= $p->next->val) {                $p = $p->next;            }            $cur->next = $p->next;            $p->next = $cur;            $cur = $next;        }        return $dummy->next;    }}
GO代码实现:
/** * Definition for singly-linked list. * type ListNode struct { *     Val int *     Next *ListNode * } */func insertionSortList(head *ListNode) *ListNode {    dummy := &ListNode{}    cur := head    for cur != nil {        next := cur.Next        p := dummy        for p.Next != nil && cur.Val >= p.Next.Val {            p = p.Next        }        cur.Next = p.Next        p.Next = cur        cur = next    }    return dummy.Next}