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.

Example:

Input: head = 1->4->3->2->5->2, x = 3
Output: 1->2->2->4->3->5

code

  把比target值小的结点组成一个新的链表,把旧的链表链在新的链表尾部

struct ListNode
{
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

class Solution
{
public:
    ListNode* partition(ListNode* head, int x)
    {
        if(!head)
            return head;

        ListNode curHead(-1);
        curHead.next=head;
        ListNode *cur=&curHead;

        ListNode newHead(-1);
        ListNode *cur1=&newHead;
        while(cur->next)
        {
            if(cur->next->val<x)
            {
                cur1->next=cur->next;
                cur1=cur1->next;
                cur->next=cur->next->next;

                cur1->next=nullptr;//new list break with old list
            }
            else
                cur=cur->next;
        }

        cur1->next=curHead.next;
        return newHead.next;
    }
};

 

上一篇:System.in实现数据的键盘输入


下一篇:下划线和父级宽度一样宽