题目链接:分隔链表
题意:给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
题解:QAQ刚开始看题目看错了。以为是那种排序。要按大小的。写了一堆错的。然后重新看题,发现简单了不少啊。
用两个链表分别放比x小的和比x大的,最后组合在一起就行了。。只要求保留相对位置
代码:
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 ListNode* big = new ListNode(0); 13 ListNode* small = new ListNode(0); 14 15 ListNode* pb = big; 16 ListNode* ps = small; 17 while(head){ 18 if(head->val < x){ 19 ps->next = head; 20 ps = ps->next; 21 } 22 else{ 23 pb->next = head; 24 pb = pb->next; 25 } 26 head = head->next; 27 } 28 29 ps->next = big->next; 30 pb->next = NULL; 31 32 return small->next; 33 } 34 };
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。