86. Partition List

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.

解析

  • 思路:新建两个节点preHead1与preHead2,分别为指向两个链表的头结点。把节点值小于x的节点链接到链表1上,节点值大等于x的节点链接到链表2上。最后把两个链表相连即可
  • right.next=null;//这句很重要!链表最后一个元素如果小于x的话,那么right.next不为null; 自己的没有想到,画个简单的示意图就知道,为甚末要置NULL,后面就绕开了这个问题,分离每一个节点
// 86. Partition List
class Solution_86 {
public:
    ListNode* partition(ListNode* head, int x) {

        if (!head||!head->next)
        {
            return head;
        }
    
        ListNode*cur = head;
        ListNode*left = new ListNode(0);
        ListNode*p = left;
        ListNode*right = new ListNode(0);
        ListNode*q = right;
        while (cur)
        {
            ListNode* temp = cur;   
            cur = cur->next;
            temp->next = NULL;

            if (temp->val<x)
            {
                left->next = temp;
                left = left->next;
            }
            else
            {
                right->next = temp;
                right = right->next;
            }
        }

        left->next = q->next;
        return p->next;
    }
};

题目来源

    原文作者:ranjiewen
    原文地址: https://www.cnblogs.com/ranjiewen/p/8782797.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞