我是靠谱客的博主 缓慢百合,最近开发中收集的这篇文章主要介绍分隔链表(链表 /LeetCode),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目链接

题目描述

给你一个链表和一个特定值 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)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部