LeetCode: Partition List
一次过,链表题无难度
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 }