You should preserve the original relative order of the nodes in each of the two partitions.
Example: Input: head = 1->4->3->2->5->2, x = 3 Output: 1->2->2->4->3->5
code
把比target值小的结点组成一个新的链表,把旧的链表链在新的链表尾部
struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution { public: ListNode* partition(ListNode* head, int x) { if(!head) return head; ListNode curHead(-1); curHead.next=head; ListNode *cur=&curHead; ListNode newHead(-1); ListNode *cur1=&newHead; while(cur->next) { if(cur->next->val<x) { cur1->next=cur->next; cur1=cur1->next; cur->next=cur->next->next; cur1->next=nullptr;//new list break with old list } else cur=cur->next; } cur1->next=curHead.next; return newHead.next; } };