链表划分
来源:互联网 发布:php开源管理后台框架 编辑:程序博客网 时间:2024/05/23 15:36
给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。
你应该保留两部分内链表节点原有的相对顺序。
样例
给定链表 1->4->3->2->5->2->null,并且 x=3
返回 1->2->2->4->3->5->null
import java.util.Scanner;/** * * 给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。您在真实的面试中是否遇到过这个题? Yes样例给定链表 1->4->3->2->5->2->null,并且 x=3返回 1->2->2->4->3->5->null * @author Dell * */public class Test96 { public static ListNode partition(ListNode head, int x) { if(head==null||head.next==null) return head; ListNode temp=new ListNode(-1); temp.next=head; ListNode p=temp; ListNode q=temp.next; ListNode r=temp; while(q!=null) { if(q.val<x) { if(p==temp) { p=p.next; q=q.next; r=r.next; } else { if(p.val>=x) { ListNode temp1=q; q=q.next; p.next=temp1.next; temp1.next=null; temp1.next=r.next; r.next=temp1; r=r.next; } else { p=p.next; q=q.next; r=r.next; } } } else { p=p.next; q=q.next; } } return temp.next; }public static void main(String[] args) {Scanner sc=new Scanner(System.in); int n=sc.nextInt(); ListNode list=new ListNode(-1); ListNode p=list; for(int i=0;i<n;i++) { ListNode temp=new ListNode(sc.nextInt()); p.next=temp; p=p.next; }int target=sc.nextInt(); ListNode result=partition(list.next,target); while(result!=null) { System.out.print(result.val+" "); result=result.next; } }}
阅读全文
0 0
- 链表划分
- 链表划分
- 题目:链表划分
- LintCode-链表划分
- 链表划分
- 链表划分
- LintCode:链表划分
- 链表的划分
- 链表:链表划分
- 链表划分
- 链表划分
- Lintcode 链表划分
- 链表划分
- LintCode 链表划分
- 链表划分-LintCode
- 链表划分
- 链表划分
- 链表划分
- Linux下解压rar文件
- banner自动生成工具,ascii文字展示
- Swift
- UVa136 Ugly Numbers(优先队列+set判重)
- jquery判断radio是否选中
- 链表划分
- git图形化工具GitKraken的使用——版本回退(reset)
- Swift
- 设计模式(Design Pattern)
- hdoj1004 Let the Balloon Rise(map)
- 数组的旋转
- 通过java.net.URLConnection发送HTTP请求的方法
- 用JavaScript实现简单的验证码
- 三个三个会