概述
题目链接
题目描述
给你一个链表和一个特定值 x ,请你对链表进行分隔,使得所有小于 x 的节点都出现在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
输入:head = 1->4->3->2->5->2, x = 3
输出:1->2->2->4->3->5
思路
维护两个链表,一个链表保存比x小的结点,另一个链表保存大于等于x的结点,采用尾插法保证相对位置不变,最后让小的链表末尾指向大的链表即可。
代码如下:
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
if(!head)
return NULL;
ListNode *p1=new ListNode(0),*p2=new ListNode(0),*ans=p1,*p3=p2;
while(head){
if(head->val<x){
p1->next=head;
p1=p1->next;
}
else{
p2->next=head;
p2=p2->next;
}
head=head->next;
}
p2->next=NULL;
p1->next=p3->next;
return ans->next;
}
};
最后
以上就是缓慢百合为你收集整理的分隔链表(链表 /LeetCode)的全部内容,希望文章能够帮你解决分隔链表(链表 /LeetCode)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复