1. 程式人生 > >Leetcode:86分隔連結串列

Leetcode:86分隔連結串列

給定一個連結串列和一個特定值 x,對連結串列進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。

你應當保留兩個分割槽中每個節點的初始相對位置。

示例:

輸入: head = 1->4->3->2->5->2, x = 3
輸出: 1->2->2->4->3->5

解題思路:

建立兩個連結串列head1,head2,遍歷head中的所有數值,小於x的結點插入head1的表尾,大於或等於x的結點插入head2的表尾。

最後,將head1的表尾連線到head2的表頭即可,最終輸出head1的表頭。

C++程式碼
class Solution { public:     ListNode* partition(ListNode* head, int x) {         ListNode* head1, *head2, *p, *q, *pos = head;         head1 = new ListNode(0);         head2 = new ListNode(0);         p = head1; q = head2;         while (pos) {             if (pos->val < x) { p->next = pos; p = p->next; }             else { q->next = pos; q = q->next; }             pos = pos->next;         }         p->next = head2->next;         q->next = NULL;         return head1->next;     } };