概述
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
.
Subscribe to see which companies asked this question
【解题思路】
题意:
给定一个单链表和一个x,把链表中小于x的节点放到前面,
大于等于x的节点放到后面,每部分元素的原始相对位置不变。
思路:
其实很简单,遍历一遍链表,把小于x节点的都挂到small后,
把大于等于x的都放到big后面后,
最后再把大于等于的链表big挂到小于链表的后面就可以了。
【代码实现】
struct ListNode* partition(struct ListNode* head, int x)
{
/*1.异常处理*/
if(!head || !head->next)
return head;
struct ListNode *big = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *small = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *b = big;
struct ListNode *s = small;
b->next = NULL;
s->next = NULL;
struct ListNode *p = head;
struct ListNode *pnext = NULL;
while (head) {
pnext = head->next; //保存节点非常重要
/*大于x的节点挂在x的后面,即挂在b的后面即可*/
if(head->val >= x) {
b->next = head;
b = b->next;
b->next = NULL;
/*小于x的节点挂在x的后面,小的挂在s的后面即可*/
} else {
s->next = head;
s = s->next;
s->next = NULL;
}
head = pnext;
}
s->next = big->next;/*大的结点挂在小的节点后面*/
head = small->next;/*小的头结点*/
free(small);
free(big);
return head;
}
最后
以上就是开心凉面为你收集整理的[LeetCode-86] Partition List (链表数据分区)的全部内容,希望文章能够帮你解决[LeetCode-86] Partition List (链表数据分区)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复