一次过,链表题无难度
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 *partition(ListNode *head, int x) { 12 // Start typing your C/C++ solution below 13 // DO NOT write int main() function 14 ListNode *less, *larger, *p, *q, * ret; 15 less = larger = p = q = ret = NULL; 16 while (head) { 17 if (head->val < x) { 18 if (! less) { 19 less = new ListNode(head-> val); 20 p = less; 21 } 22 else { 23 p->next = new ListNode(head-> val); 24 p = p-> next; 25 } 26 } 27 else { 28 if (! larger) { 29 larger = new ListNode(head-> val); 30 q = larger; 31 } 32 else { 33 q->next = new ListNode(head-> val); 34 q = q-> next; 35 } 36 } 37 head = head-> next; 38 } 39 if (!less) ret = larger; 40 if (!larger) ret = less; 41 if (less && larger) { 42 p->next = larger; 43 ret = less; 44 } 45 return ret; 46 } 47 };
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 Partition(ListNode head, int x) { 11 ListNode less = null , larger = null , p = null , q = null , ans = null ; 12 while (head != null ) { 13 if (head.val < x) { 14 if (less == null ) { 15 less = new ListNode(head.val); 16 p = less; 17 } 18 else { 19 p.next = new ListNode(head.val); 20 p = p.next; 21 } 22 } 23 else { 24 if (larger == null ) { 25 larger = new ListNode(head.val); 26 q = larger; 27 } 28 else { 29 q.next = new ListNode(head.val); 30 q = q.next; 31 } 32 } 33 head = head.next; 34 } 35 if (less == null ) ans = larger; 36 if (larger == null ) ans = less; 37 if (less != null && larger != null ) { 38 p.next = larger; 39 ans = less; 40 } 41 return ans; 42 } 43 }