这题一开始想新建一个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 }