链表(篇8)给定链表及K将链表中的节点按小于K等于K大于K排列不改变它们原来次序
来源:互联网 发布:青蛙寿命 知乎 编辑:程序博客网 时间:2024/05/16 11:28
给定一个链表和值k,将其排序,使得小于x的所有节点首先,然后所有节点的值等于x,最后节点的值大于或等于x。应保留三个分区中的每一个中的节点的原始相对顺序。
例子:
输入:1-> 4-> 3-> 2-> 5-> 2-> 3 x = 3输出:1-> 2-> 2-> 3-> 3-> 4-> 5输入:1-> 4-> 2-> 10 x = 3输出:1-> 2-> 4-> 10输入:10-> 4-> 20-> 10-> 3 x = 3输出:3-> 10-> 4-> 20-> 10
思路:
将原链表中的节点依次取下来插到新的头节点后,如果节点值大于K则将其放到新链表的最后,如果节点值小于K则将其放到节点值小于k的最后,若等于k就放到等于k的最后。
代码:
public ListNode Partitioning(ListNode head,int k) { ListNode phead=new ListNode(0); //产生一个新的头节点 ListNode curr,next,pre; curr=head; if(curr==null||curr.next==null) { return head; //如果链表为空或者链表中只有一个元素则直接返回链表。 } while(curr!=null) { System.out.println(curr.val); next=curr.next; curr.next=null; pre=phead; if(curr.val<k) { //如果从链表中取下的节点值小于K,将其插入到小于所有小于k的节点的最后 while(pre.next!=null&&pre.next.val<k) { pre=pre.next; } if(pre.next==null) { pre.next=curr; } else { curr.next=pre.next; pre.next=curr; } } else if(curr.val==k){ //如果取下来的节点值等于k将其放到所有等于K的节点的最后 while(pre.next!=null&&pre.next.val<=k) { pre=pre.next; } if(pre.next==null) { pre.next=curr; } else { curr.next=pre.next; pre.next=curr; } } else if(curr.val>k) { //如果节点值等于K则将其插入到链表的最后。 while(pre.next!=null) { pre=pre.next; } pre.next=curr; } curr=next; } return phead.next; }
0 0
- 链表(篇8)给定链表及K将链表中的节点按小于K等于K大于K排列不改变它们原来次序
- 给定整数a1、a2、a3、...、an,判断是否可以从中选出若干个数,使得它们的和等于k(k任意给定,且满足-10^8 <= k <= 10^8)。
- 给定一个字符串和一个整数k,对字符串开头算起的每2k个字符的前k个字符进行反转。 如果还有少于k个字符,则将其全部撤消。 如果小于2k但大于或等于k个字符,则反转前k个字符,
- 求链表的倒数第K个节点,如果K大于链表长度则返回NULL
- k
- k
- k,
- k
- k
- k
- K -
- K
- K
- K
- K
- K
- k
- K
- Java多线程基础之线程安全
- Solr.NET快速入门(五)【聚合统计,分组查询】
- dddddddd
- 什么是webservice -- 纯介绍
- (平衡二叉树最少结点最大深度公式...?)HDU 2193 AVL Tree
- 链表(篇8)给定链表及K将链表中的节点按小于K等于K大于K排列不改变它们原来次序
- 图算法总结---Prime算法
- Beginning
- 练习
- Mybatis学习中遇到的异常(2)
- 通过反编译深入理解Java String及intern(笔记整理二)
- c语言字符串整数转换
- opencv学习之常用函数
- 【Laravel】 的请求生命周期