leetcode:单链表之Partition List

在给定的单链表中,将所有小于x的节点置于大于或等于x的节点之前,保持各部分节点的相对顺序不变。例如,对于链表1->4->3->2->5->2和x=3,返回1->2->2->4->3->5的解决方案。本文介绍了一种C++实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

leetcode:单链表之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的放到后面,每部分元素的原始相对位置不变。

c++实现:

#include <iostream>

using namespace std;
struct ListNode
{
	int val;
	ListNode *next;
	ListNode (int x):val(x),next(NULL){ }
};
ListNode *createListNode(int arr[],int n)
{
	ListNode *r;
	ListNode *p;
	ListNode * L=(ListNode*)malloc(sizeof(ListNode));
	
	r=L;
	
	for(int i=0;i<n;i++)
	{
		p=(ListNode*)malloc(sizeof(ListNode));
		p->val=arr[i];
		r->next=p;
		r=p;
	}
	r->next=NULL;

    return L->next;
}
ListNode *partition(ListNode* head, int x)
{
	if (head == NULL) 
		return head;

    ListNode left_dummy(0); // 头结点
    ListNode right_dummy(0); // 头结点
	
	auto left_cur = &left_dummy;
    auto right_cur = &right_dummy;
    for (; head; head = head->next) 
	{
         if (head->val < x) 
		 {
             left_cur->next = head;
             left_cur = head;
         } 
		 else 
		 {
			 right_cur->next = head;
             right_cur = head;
          }
    }
    left_cur->next = right_dummy.next;
    right_cur->next = NULL;
    return left_dummy.next;
}
int main()
{
	int a[]={1,4,3,2,5,2};
	
	ListNode *input; 
	ListNode *out;
	int x=3;

	input= createListNode(a,6);
	out=partition(input, x);

	while(out != NULL)
	{
        cout<<out->val;
        out = out->next;
    }
	cout<<endl;
	return 0;
}


测试结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值