hello congshen

自我成长

[leetcode] 【链表】86. 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.


题意

给定一个值x,把链表中小于x的值放到大于等于x的值之前。即
Given 1->4->3->2->5->2 and x = 3,

return 1->2->2->4->3->5.

同时,两部分的节点要保持原来链表的节点顺序。

题解

创建两个链表,一个存储小的,一个存储大于等于的。
最后把两个链表相连即可。
/**
 * 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) {
        ListNode small(-1);
        ListNode big(-1);
        auto small_p=&small;
        auto big_p=&big;
        for(ListNode *cur=head;cur;cur=cur->next)
        {
            if(cur->val<x)
            {
                small_p->next=cur;
                small_p=cur;
            }
            else
            {
                big_p->next=cur;
                big_p=cur;
            }
        }
        big_p->next=NULL;
        small_p->next=big.next;
        return small.next;
    }
};


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014654002/article/details/51539084
文章标签: leetcode cpp
个人分类: leetcode链表 c-c++
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭