链表划分-LintCode

来源:互联网 发布:腾讯云免费域名 编辑:程序博客网 时间:2024/05/19 11:17

描述:

给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。

你应该保留两部分内链表节点原有的相对顺序。

样例:

给定链表 1->4->3->2->5->2->null,并且 x=3

返回 1->2->2->4->3->5->null


思路:

这个题我们可以建立两个新的链表left和right;

遍历给定链表,判断每个节点val的值,把小于x的节点用尾插法插入到left里,把大于等于x的节点用尾插法插入到right里,

最后将right接在left后面就好了~


/** * Definition of ListNode * class ListNode { * public: *     int val; *     ListNode *next; *     ListNode(int val) { *         this->val = val; *         this->next = NULL; *     } * } */class Solution {public:    /**     * @param head: The first node of linked list.     * @param x: an integer     * @return: a ListNode      */    ListNode *partition(ListNode *head, int x) {        // write your code here        if(head==NULL)             return NULL;        ListNode *leftDummy=new ListNode(0);        ListNode *rightDummy=new ListNode(0);        ListNode *left=leftDummy;        ListNode *right=rightDummy;        while(head!=NULL)        {            if((head->val)<x)            {                left->next=head;                left=left->next;            }            else            {                right->next=head;                right=right->next;            }            head=head->next;        }        right->next=NULL;        left->next=rightDummy->next;        return leftDummy->next;    }};


0 0