【牛客刷题】每日一练—链表分割

简介: 【牛客刷题】每日一练—链表分割

✨hello,进来的小伙伴们,你们好耶!✨

🍖🍖系列专栏:【牛客刷题】

🍈🍈作者简介:一名双非本科大三在读的Java编程小白,启夜星辰,你我同行!

问题描述

现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。

解题思路:

1、我们可以定义四个节点,bs be 用于存储表示小于x的所有节点,as,ae表示用来存储大于等于x的节点,bs,as永远指向两段链表的头,be,ae指向两段链表的尾巴,这样就省去了每次需要找尾巴的麻烦,然后遍历链表把这些节点都存起来,最后通过be.next = as;将两段链表链接起来。

   import java.util.*;

   

   /*

   public class ListNode {

       int val;

       ListNode next = null;

       ListNode(int val) {

           this.val = val;

       }

   }*/

   public class Partition {

       public ListNode partition(ListNode head, int x) {

           //根据x,将链表中的数据划分成两部分

           //小于x的部分

           ListNode bs = null;

           ListNode be = null;

           //大于x的部分

           ListNode as = null;

           ListNode ae = null;

           while (head != null) {

               //判断当前head的val是哪一部分

               if (head.val < x) {

                   //判断是否是第一次插入

                   if (bs == null) {

                       bs = head;

                       be = head;

                   } else {

                       be.next = head;

                       be = be.next;

                   }

                   head = head.next;

               } else {

                   if (as == null) {

                       as = head;

                       ae = head;

                   } else {

                       ae.next = head;

                       ae = ae.next;

                   }

                   head = head.next;

               }

           }

           //链表数据全部大于x

           if (bs == null) {

               return as;

           }

           if (as != null) {

               ae.next = null;

           }

           be.next = as;

           return bs;

       }

   }


相关文章
|
1月前
|
程序员
【刷题记录】移除链表元素
【刷题记录】移除链表元素
|
1月前
|
索引 Python
【Leetcode刷题Python】328. 奇偶链表
在不使用额外空间的情况下,将链表中的奇数和偶数索引节点重新排序的方法,并提供了相应的Python实现代码。
28 0
|
1月前
|
Python
【Leetcode刷题Python】114. 二叉树展开为链表
LeetCode上114号问题"二叉树展开为链表"的Python实现,通过先序遍历二叉树并调整节点的左右指针,将二叉树转换为先序遍历顺序的单链表。
21 3
【Leetcode刷题Python】114. 二叉树展开为链表
|
1月前
【刷题记录】链表的回文结构
【刷题记录】链表的回文结构
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
40 5
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
31 4
|
1月前
|
存储 Python
【Leetcode刷题Python】23. 合并K个升序链表
合并K个升序链表的方法:使用数组排序的暴力求解法、使用小顶堆的高效方法,以及分而治之的策略,并提供了相应的Python实现代码。
13 1
|
1月前
|
机器学习/深度学习
【刷题记录】相交链表
【刷题记录】相交链表
|
1月前
【刷题记录】链表的中间结点
【刷题记录】链表的中间结点
|
1月前
|
Python
【Leetcode刷题Python】234.回文链表
两种判断链表是否为回文的方法:使用栈和拆分为两个链表后反转对比,并给出了相应的Python代码实现。
15 0