【Leetcode】分隔链表

题目链接:分隔链表


题意:给定一个链表和一个特定值 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 的节点之前。

你应当保留两个分区中每个节点的初始相对位置。

原文地址:https://www.cnblogs.com/Asumi/p/12514527.html