这题一开始想新建一个list,结果MLE了,后来想了想不用新建,insertion的概念理解好就行,具体编程部分不难
1
/*
*
2
* Definition for singly-linked list.
3
* struct ListNode {
4
* int val;
5
* ListNode *next;
6
* ListNode(int x) : val(x), next(NULL) {}
7
* };
8
*/
9
class
Solution {
10
public
:
11
ListNode *insertionSortList(ListNode *
head) {
12
if
(!head)
return
NULL;
13
ListNode *hpre =
new
ListNode(
0
);
14
hpre->next =
head;
15
ListNode *pre =
head;
16
head = head->
next;
17
while
(head) {
18
if
(head->val > pre->
val) {
19
head = head->
next;
20
pre = pre->
next;
21
}
22
else
{
23
pre->next = head->
next;
24
ListNode *tmp =
hpre;
25
while
(head->val > tmp->next->val) tmp = tmp->
next;
26
head->next = tmp->
next;
27
tmp->next =
head;
28
head = pre->
next;
29
}
30
}
31
return
hpre->
next;
32
}
33
};
C#
1
/*
*
2
* Definition for singly-linked list.
3
* public class ListNode {
4
* public int val;
5
* public ListNode next;
6
* public ListNode(int x) { val = x; }
7
* }
8
*/
9
public
class
Solution {
10
public
ListNode InsertionSortList(ListNode head) {
11
if
(head ==
null
)
return
null
;
12
ListNode hpre =
new
ListNode(
0
);
13
hpre.next =
head;
14
ListNode pre =
head;
15
head =
head.next;
16
while
(head !=
null
) {
17
if
(head.val >
pre.val) {
18
head =
head.next;
19
pre =
pre.next;
20
}
21
else
{
22
pre.next =
head.next;
23
ListNode tmp =
hpre;
24
while
(head.val > tmp.next.val) tmp =
tmp.next;
25
head.next =
tmp.next;
26
tmp.next =
head;
27
head =
pre.next;
28
}
29
}
30
return
hpre.next;
31
}
32
}

