首页 > 代码库 > Partition List

Partition List

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.

分析:头结点的应用对本程序至关重要,降低了编程难度;

code:

/** * 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 head;                    ListNode lt(-1);        ListNode rt(-1);        ListNode *lt_next=&lt;        ListNode *rt_next=&rt;                while(head)        {            if(head->val<x)            {                lt_next->next=head;                lt_next=head;            }            else            {                rt_next->next=head;                rt_next=head;            }            head=head->next;        }                lt_next->next=rt.next;        rt_next->next=NULL;                return lt.next;    }};
View Code

 

Partition List