首页 > 代码库 > [LeetCode] [Partition List 2012-04-30]
[LeetCode] [Partition List 2012-04-30]
Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.
You should preserve the original relative order of the nodes in each of the two partitions.
For example, Given 1->4->3->2->5->2
and x = 3, return 1->2->2->4->3->5
.
the key point of this problem is "DO NOT FORGET TO SET NULL".
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public : ListNode *partition(ListNode *head, int x) { if (head == NULL) return NULL; bool bBig= false ; bool bSmall= false ; ListNode *p=head; ListNode * pBig = NULL; ListNode * pSmall = NULL; ListNode *pHead = NULL; ListNode *pHead2 = NULL; while (p!=NULL) { int v = p->val; if (v >= x) { if (pBig==NULL) { pBig = p; pHead2 = p; } else { pBig->next=p; pBig = pBig->next; } } if (v < x) { if (pSmall==NULL) { pSmall = p; pHead = p; } else { pSmall->next=p; pSmall = pSmall->next; } } p=p->next; } !!!!!!!! //this is really import, or there will be a circle in linklist!!!!!!!!!! if (pSmall != NULL) { pSmall->next = NULL; } if (pBig != NULL) { pBig->next = NULL; } if (pHead != NULL) { pSmall->next = pHead2; } else { pHead = pHead2; } return pHead; } }; |
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。